大量写入日志或存在某大文件占满磁盘,会造成应用程序崩溃。对于此问题,可以使用一个简单的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="[email protected]"
set smtp="smtp.163.com"
set smtp-auth-user="[email protected]"
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 ">服务器报警通知" [email protected]
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
via https://segmentfault.com/a/1190000022452396
其他参考:
https://www.jianshu.com/p/728a9a55e87a
https://blog.csdn.net/liuhaoy/article/details/103745288
https://blog.csdn.net/thxxin/article/details/80276015