可能因为有点超载,跑在Linode上的Lighttpd时不时会挂掉,
导致一些网站包括本博客500,但服务器是正常运行的,手动restart一遍Lighttpd恢复。
所以想到写个shell来自检并重启并每天做好记录。
因为用其他监控系统的话,没法自动重启,有时候通知没看到就一直挂。
本来是考虑用curl抓内容到txt,再用grep检测包含500的行数,grep -r 加 wc -l就可以实现。
后来发现略卡,所以直接采用curl抓取页面状态代码的方式:
1 2 3 4 5 6 7 8 9 10 |
#!/bin/bash status=`curl -o /dev/null -s -w %{http_code} $1` if [ $status -eq 200 ] #这里我采用的是只有200才正常,你也可以写成判断500,注意有些301也是正常的。 then echo `date`,ok,$status >> /root/check/$(date +"%Y%m%d").log else echo `date`,fail,$status >> /root/check/$(date +"%Y%m%d").log /sbin/service lighttpd restart #这里可以改成httpd或nginx,看你需要,不可以单service,crontab下无效。 #重启语句也可以这样 /etc/init.d/lighttpd restart ,一样效果 fi |
这样就完成了sh,调用sh check.sh 你的网站URL
就可以实现单次检测。
为了防止dns问题导致的重启,可以改hosts,把检测对象网站url指127.0.0.1
最后一步自然是crontab了
我自用的是两分钟检测一遍,*/2 * * * * sh /root/check/check.sh 改成url
sh中带log记录,记录效果如下:
1 2 3 4 5 6 7 |
[root@li734-211 ~]# cat /root/check/20150625.log Thu Jun 25 20:52:36 CST 2015,ok,200 Thu Jun 25 21:05:33 CST 2015,ok,200 Thu Jun 25 21:08:01 CST 2015,ok,200 Thu Jun 25 21:10:01 CST 2015,ok,200 Thu Jun 25 21:12:01 CST 2015,ok,200 Thu Jun 25 21:14:01 CST 2015,ok,200 |
暂时就写到这么多,有兴趣的童鞋可以改进下加入以下功能:邮件提醒、防连续重启、关键字检测、自动清理N天前的log
可以和我交流。Q702048,注明hiwbb交流
补个mailx的自动通知吧,mailx请看下一篇博文。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#!/bin/bash LANG=en_US.UTF-8 export LANG MAIL_TO=15918715697@139.com status=`curl -o /dev/null -s -w %{http_code} $1` if [ $status -eq 200 ] then echo `date`,ok,$status >> /root/check/$(date +"%Y%m%d").log else echo `date`,fail,$status >> /root/check/$(date +"%Y%m%d").log /etc/init.d/lighttpd restart echo `date` | mailx -s "WEB重启" $MAIL_TO fi |