需求:
1.每隔10s监控httpd的进程数,若进程数大于等于500,则自动重启apache服务,并检查服务是否重启成功
2.若未成功启动则需要再次启动,若重启5次依旧没有成功,则向管理员发送告警邮件,并退出检测
3.如果启动成功,则等待1分钟再次检测httpd进程数,若进程数正常,则恢复正常检测(10s一次),否则放弃重启并向管理员发送告警邮件并退出检测
#!/bin/bash
#计数器函数
check_service ()
{
j=0
for i in `seq 1 5`;do
#重启 Apache 的命令
/usr/local/apache2/bin/apachectl restart 2> /var/log/httpderr.log
#判断服务是否重启成功
if [ $? -eq 0 ];then
break
else
j=$[$j+1]
fi
#判断服务是否已尝试重启 5 次
if [ $j -eq 5 ];then
echo "apache will be restart " |mail -s "apache" xx@qq.com
exit
fi
done
}
while :
do
n=`pgrep -l httpd|wc -l`
#判断httpd服务进程数是否超过500
if [ $n -gt 500 ];then
/usr/local/apache2/bin/apachectl restart
if [ $? -ne 0 ];then
check_service
else
sleep 60
n2=`pgrep -l httpd|wc -l`
#判断重启后是否依旧超过 500
if [ $n2 -gt 500 ];then
echo "apache will be restart " |mail -s "apache" xx@qq.com
exit
fi
fi
fi
#每隔 10s 检测一次
sleep 10
done