前提
1、需要服务器中安装sendemail以及mailutils插件,具体操作请转度娘
2、需要使用cron添加定时任务,我设置的是每三分钟执行一次
*/3 * * * * sh /mnt/web/tomcat/monitor/monitor.sh >/dev/null 2>&1 &
3、执行脚本会出现发送太慢或发送失败的情况,这是因为邮件发送回对发件邮箱的邮箱名服务器进行解析,解决方法:修改 /etc/hosts,将邮箱服务器名映射到127.0.0.1,并重启senmail服务器 service sendmail restart
脚本内容
#!/bin/sh
#. /etc/profile
logPath=/mnt/web/tomcat/monitor/log/monitor`date '+%Y-%m-%d'`.log
#接收邮箱,多个用英文逗号隔开
mails=xxx@gmail.com
echo "">>$logPath
echo `date '+%Y-%m-%d %H:%M:%S'`>>$logPath
pid=`ps aux | grep tomcat | grep -v grep | grep -v retomcat | awk '{print $2}'`
sendMail=0
if [ -n "$pid" ]
then
{
echo "已检测到pid:$pid,继续检测页面。。。">>$logPath
#https://xxx.com/favicon.ico为服务器的测试url,可以根据项目随便写,只要不是404的就可以。我这里是指向的一个图标
check=`/usr/bin/wget -S --spider --tries=3 --timeout=10 https://xxx.com/favicon.ico 2>&1 | grep HTTP/1.1|awk '{print $2}'`
echo "页面检测返回状态码:$check">>$logPath
if [ $check -eq 200 ];then
echo "tomcat状态正常">>$logPath
else
sendMail = 1
echo "tomcat状态异常,准备重启。。。">>$logPath
echo "tomcat shutdown">>$logPath
/mnt/web/tomcat/tomcat8/bin/shutdown.sh
sleep 3
pid=`ps aux | grep tomcat | grep -v grep | grep -v retomcat | awk '{print $2}'`
if [ -n "$pid" ]
then
{
sleep 1
echo "kill tomcat:$pid">>$logPath
kill -9 $pid
}
fi
sleep 1
echo "tomcat startup">>$logPath
/mnt/web/tomcat/tomcat8/bin/startup.sh
fi
}
else
sendMail = 1
echo "未检测到pid,开始重启tomcat...">>$logPath
/mnt/web/tomcat/tomcat8/bin/startup.sh
fi
#发送邮件
if [ $sendMail -eq 1 ]
then
{
echo "开始发送邮件。sendTo:$mails"
#root@host.com就是接收邮件时候显示的发件人
mail -s "Server Monitor Error" $mails < $logPath -A $logPath -a From:root@host.com
}
fi
来源:oschina
链接:https://my.oschina.net/u/2688093/blog/743205