脚本说明:
1、检查服务器的各端口服务是否正常。
2、服务端口如果没有正常监听,将自动重启该端口服务,记录日志,并发邮件通知管理员。
3、让crontab每5分钟自动执行该脚本。
4、脚本调用了sendEmail来发邮件,请自行谷歌百度装sendEmail。再次提醒是sendEmail 不是sendmail 。。。
[root@node2 ~]# cat monitor.sh
#!/bin/bash
#
# description: service check
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
Email(){
Send=SendEmail@163.com #用来发邮件的邮箱,我这里是用的163邮箱
Pass=SendEmailPass #用来发邮件的邮箱密码
Recv=RecvEmail@qq.com #用来接收邮件通知的邮箱,我这里是qq邮箱
IPADDR=eth0 #邮件正文中指明是哪个服务器哪个网卡的IP地址
/usr/local/bin/sendEmail -f "$Send" -t "$Recv" -s smtp.163.com -xu "$Send" -xp "$Pass" -o message-charset=utf8 -u "$i port service is restarted." -m "$i port service is restarted, Please check the server whether there are abnormal.\n\n\n`ifconfig ${IPADDR}`" &> /dev/null
}
LOG(){
echo -e "`date +%F_%T` "$i" service restart...\n`vmstat`\n\n" >> /tmp/monitor.log #记录日志
}
for i in 22 80 3306 9000; do #要检查的端口,各端口之间用空格分隔
netstat -tnl | awk ‘NR>2{print $4}‘ | grep ":$i\>$" &> /dev/null
if ! [ $? -eq 0 ]; then
case "$i" in
22)
service sshd restart &> /dev/null
LOG
;;
80)
service nginx restart &> /dev/null
LOG
;;
3306)
service mysqld restart &> /dev/null
LOG
;;
9000)
service php-fpm restart &> /dev/null
LOG
;;
esac
fi
done
本文出自 “换个角度看世界” 博客,请务必保留此出处http://netvn.blog.51cto.com/8370732/1728599
原文地址:http://netvn.blog.51cto.com/8370732/1728599