昨天发生一件事儿,腾讯云主机登录后,有一些命令执行失败,提示硬盘容量不足。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邮箱,查看了一下,可以用客户端进行收发邮件,但是需要认证,可以发行客户端授权码(相当于登录密码)。照下图进行设置,并记录生成的授权码。

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端口是不能发送到外网的。申请了一下解封后解决。菜单在费用和工单旁边。

 腾讯云主机开通25福安口

GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:1 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐