大量写入日志或存在某大文件占满磁盘,会造成应用程序崩溃。对于此问题,可以使用一个简单的shell,实现磁盘使用率接近阈值时,进行邮件提醒的功能。

环境

  • Ubuntu 16.04

邮件服务

安装 heirloom-mailx

sudo apt-get install heirloom-mailx

配置 smtp

vi /etc/s-nail.rc (或nail.rc)

按使用的相应邮箱服务配置,password一般使用授权码

// s-nail.rc
set from="XXX@163.com"
set smtp="smtp.163.com"
set smtp-auth-user="XXX@163.com"
set smtp-auth-password="xxx"
set smtp-auth=login

测试是否发送成功

echo date "邮件内容" | heirloom-mailx -vs "标题" xxx@163.com

shell脚本

创建脚本disk-space-notice.sh,如果/dev/sda1磁盘分区使用率超过85%,则发送邮件提醒。

// disk-space-notice.sh
dev_sda1=`df -h | sed -n '4p' | awk '{print $5}' | cut -f 1 -d '%'`
if
        ((dev_sda1 > 85));
then
        echo "VM服务器-dev_sha1 磁盘使用率超过阈值" | heirloom-mailx -vs ">服务器报警通知" xxx@163.com
fi

简单解释代码

主要使用了此段命令

df -h | sed -n '4p' | awk '{print $5}' | cut -f 1 -d '%'

df -h 查看磁盘占用

文件系统        容量  已用  可用 已用% 挂载点
udev            1.9G     0  1.9G    0% /dev
tmpfs           393M   41M  352M   11% /run
/dev/sda1        29G   23G  4.6G   84% /
tmpfs           2.0G   10M  2.0G    1% /dev/shm
tmpfs           5.0M  4.0K  5.0M    1% /run/lock
tmpfs           2.0G     0  2.0G    0% /sys/fs/cgroup

最终,我们要拿到/dev/sda1的已使用率的值 84

  • sed -n '4p' 输出/dev/sda1所在行
  • awk '{print $5}' 拿到已使用率 84%
  • cut -f 1 -d '%' 切掉%

定时任务

将检测磁盘使用率的 shell,加入定时任务,指定一段时间内执行一次

// crontab -e

*/10 * * * * /bin/bash /home/ghost/disk-space-notice.sh

Mr_houzi
964 声望22 粉丝