腾讯云Linux服务器搭建(八) 服务器硬盘容量的监视脚本实现
昨天发生一件事儿,腾讯云主机登录后,有一些命令执行失败,提示硬盘容量不足。df -h 一看,硬盘容量用了100%。还好df/du能使用。用du 查了一下大文件,发现时tomcat的日志文件有两个异常,两个都是十几个G,把残留的三十多个G的容量都占了。每个留了1000行之后,先删掉这两个文件,成功恢复系统到能正常使用状态。Tomcat出现异常的原因还没分析完,这里先不说,先把硬盘容量监视做了。
思路:以前做过类似的脚本,但是手头没有了,只能重新写了。初步想定分3步,首先写脚本统计硬盘使用信息,并输出到日志文件,方便以后分析用。第二,如果硬盘使用量超过警戒线发邮件通知。第三,定时执行脚本。
1,查看硬盘使用量的脚本,因为需要设境界值,所以设计了一个参数。把使用百分比作为境界值传过去。
1 #!/bin/sh
2
3 #check parameters
4 if [ $# -ne 1 ]; then
5 echo "[error] Please input a threshold for disk useage."
6 exit 1
7 fi
8
9 usagelimit=$1
10
11 #get mountpoint
12 mountpoint=`mount | grep '^/dev/.* on /.* type ext' | awk '{print $3}'`
13
14 #get the info for every mountpoint
15 for mpt in $mountpoint
16 do
17 #get device name
18 devname0=`df -P $mpt | tail -1 | awk '{print $1}'`
19 devname=`basename $devname0`
20
21 #create history file
22 usagelog=/opt/scripts/log/stat-disk_$devname_$(date +%Y%m%d%H%M%S).log
23
24 #write header
25 echo "date,total,used,available,usage % ($mpt)" > $usagelog
26
27 #write data MB
28 echo `date +%Y-%m-%d`,`df -m -P $mpt | tail -1 | \
29 awk '{printf("%d,%d,%d,%s", $2, $3, $4, $5)}' | sed 's/%//'` >> $usagelog
30 #check useage
31 using=`df -h -P $mpt | tail -1 | awk '{print $5}' | sed 's/%//'`
32 if [ $using -gt $usagelimit ]; then
33 addr=`ifconfig eth0 | grep "inet addr" | awk '{ print $2}' | awk -F: '{print $2}'`
34 mail -s "[WARN] $addr Over threshold on disk [$mpt], useage${using}%]" zyldlxl@outlook.com < $usagelog
35 fi
36 done
37
38 exit 0
2,发邮件通知。在脚本里面用了mail -s "subject" 邮件地址 < 内容文件实现了发邮件。
如果是系统内用户的话,直接发送就可以了,但是这里设置的是一个Outlook邮箱,所以需要设置能够发外网的邮件。这台云主机是没有架设邮件服务器的,也没有邮件转送服务。只有一个邮件客户端,那就需要设置使用第三方的邮件服务器来发送邮件了。以前用的163邮箱做过,但是已经登录不了了,换QQ邮箱试一下。登录QQ邮箱,查看了一下,可以用客户端进行收发邮件,但是需要认证,可以发行客户端授权码(相当于登录密码)。照下图进行设置,并记录生成的授权码。
然后进行邮件的设置:vi /etc/mail.rc
68 set from=qq号码@qq.com
69 set smtp=smtp.qq.com
70 set smtp-auth-user=qq号码@qq.com
71 set smtp-auth-password=生成的授权码
72 set smtp-auth=login
保存后,进行一下测试:echo "Hello!" | mail -s "mail test" zyldlxl@outlook.com ,成功。
3,设置定时执行,用cron。运行crontab -e ,提示 : crontab command not found
先安装 cron
#安装
yum install vixie-cron crontabs
#查看已设定信息
[root@VM_0_12_centos scripts]# crontab -l
*/1 * * * * /usr/local/qcloud/stargate/admin/start.sh > /dev/null 2>&1 &
#不知道为啥安装上就有一个每分钟执行的任务,打开看了一下是腾讯云的
#查看启动状态,停止状态,启动一下。
[root@VM_0_12_centos scripts]# service crond status
crond is stopped
[root@VM_0_12_centos scripts]# service crond start
Starting crond: [ OK ]
#查看是否设置了自己启动,已经设定好了,不用再设置了,估计也是腾讯云帮忙设置的
[root@VM_0_12_centos scripts]# chkconfig --list crond
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
#追加上刚才写的脚本,10分钟一次,警戒值设为80%
[root@VM_0_12_centos scripts]# crontab -e
1 */1 * * * * /usr/local/qcloud/stargate/admin/start.sh > /dev/null 2>&1 &
2 */10 * * * * /opt/scripts/check_disk_useage.sh 80 > /dev/null 2>&1 &
设置完毕,10分钟后检查了一下cron的日志文件,执行成功了。
遇到的坑:1,用到的ifconfig其他用户没有权限,所以用root用户执行的脚本,也可以设置sudo user后,用sudo来实行。
2,日志文件写的相对路径,用cron实现的时候,日志文件没输出,改成用绝对路径。
3,配置好邮件后,一值发送失败,后来发现腾讯云的主机默认25端口是不能发送到外网的。申请了一下解封后解决。菜单在费用和工单旁边。
更多推荐
所有评论(0)