自动监控linux服务器负载并重启Web服务的脚本
有些时候由于程序代码或者访问量增加以及一些未知的因素会导致系统负载升高,导致服务器响应慢,或者无法提供web服务了,导致用户打不开页面。如果没什么好的解决办法,那可以试试重启web服务来解决,当负载超过某一个限定值时就自动重启web服务。
Linux系统中,通过很多命令都可以查看当前的系统平均负载值,比如:w,top或者uptime命令,命令输出的内容表示在过去的1、5、15分钟的系统负载情况。
根据系统负载值自动重启Web服务
下面的脚本,以装有Apache的服务器为例,定时判断系统负载值,当达到5时,认为系统已经超负荷运转,这时,脚本会自动重启Apache服务,释放系统资源,以达到让linux服务器平稳运行的目的。
#!/bin/sh #usage: */2 * * * * root /root/checkload.sh >>/root/checkload.log TOP_SYS_LOAD_NUM=3 SYS_LOAD_NUM=`uptime | awk '{print $(NF-2)}' | sed 's/,//'` echo $(date "%y-%m-%d") `uptime` if [ `echo "$TOP_SYS_LOAD_NUM < $SYS_LOAD_NUM"|bc` -eq 1 ] then echo "AutoStart:" $(date "%y-%m-%d %H:%M:%S") "pkill httpd" `ps -ef | grep httpd | wc -l` pkill httpd sleep 10 for i in 1 2 3 do if [ `pgrep httpd | wc -l` -le 0 ] then service httpd start sleep 15 echo "AutoStart:" $(date "%y-%m-%d %H:%M:%S") "start httpd" `ps -ef | grep httpd | wc -l` fi done else if [ `pgrep httpd | wc -l` -le 0 ] then service httpd start sleep 15 echo "AutoStart:" $(date "%y-%m-%d %H:%M:%S") "start httpd" `ps -ef | grep httpd | wc -l` fi fi
脚本中TOP_SYS_LOAD_NUM表示最大允许的系统平均负载值,当超过这一值的时候,脚本就开始重启apache服务。
脚本的使用也挺简便,直接到/etc/cron.d/ 建立一个定时执行文件,填入如下内容即可:
*/2 * * * * root /root/checkload.sh >>/root/checkload.log
这里*/2,表示每两分钟执行一次指定的脚本,并将执行结果输出到/root/checkload.log文件中。 你也可以根据自己的需要,来修改执行检查的时间。