可能因为有点超载,跑在Linode上的Lighttpd时不时会挂掉,

导致一些网站包括本博客500,但服务器是正常运行的,手动restart一遍Lighttpd恢复。

所以想到写个shell来自检并重启并每天做好记录。

因为用其他监控系统的话,没法自动重启,有时候通知没看到就一直挂。

本来是考虑用curl抓内容到txt,再用grep检测包含500的行数,grep -r 加 wc -l就可以实现。

后来发现略卡,所以直接采用curl抓取页面状态代码的方式:

#!/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记录,记录效果如下:

[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请看下一篇博文。

#!/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