Linux下监控httpd并自动重启apache

方法一

1、创建被监控的文件 ok.html 内容如下:

OK

为了尽可能简单,这里只用一个 OK 的空 html 文件作为监控文件

 

2、创建脚本 auto_restart_apache.sh ,内容如下:

#!/bin/sh
while true; do
if ( wget --timeout=5 -q --spider http://www.xxx.com/ok.html )
then
echo "OK at `date +%y-%m-%d\ %H:%M:%S`" >> /data/apache_restart_log.log #记录到日志文件
else
/etc/init.d/httpd restart #重启apache
echo "apache restart at `date +%y-%m-%d\ %H:%M:%S`" >> /data/apache_restart_log.log  #记录到日志文件
echo "httpd restarted"
fi
sleep 10 #10秒钟运行一次
done

 

3、后台运行 auto_restart_apache.sh 监控脚本: sh auto_restart_apache.sh &

前台运行与后台运行脚本的区别就是结尾的 & 符号。

附注:

1) 执行这条命令后通常会给出一个进程号例如 2239,如果需要杀死这个脚本进程,可以使用命令杀死即可: sudo kill 2239

2) 事后如想查看这一进程,可以使用如下命令: ps -ef | grep apache

 

4、加入开机自启动

修改/etc/rc.local脚本

末尾加入如下语句

auto_restart_apache.sh &

 切忌 命令行末尾要加上 [  &  ] 符号, 表示任务在后台执行。否则会阻塞后面添加的命令行执行。

 

方法二

脚本如下

#!/bin/sh
if ( wget --timeout=5 -q --spider http://xxx.com/ok.html )
then
echo "OK at `date +%y-%m-%d\ %H:%M:%S`" >> /data/check_apache_log/$(date +%y-%m-%d).log #记录日志 
else
/etc/init.d/httpd restart #重启apache
echo "httpd restart at `date +%y-%m-%d\ %H:%M:%S` " >> /data/check_apache_log_restart.log #记录日志
fi

  这段代码保存为check_apache.sh,添加到crontab。

执行 crontab -e 后输入以下语句,然后 :wq 保存退出。

*/1 * * * * /data/check_apache.sh
*/1 * * * * sleep 5; /data/check_apache.sh
*/1 * * * * sleep 10; /data/check_apache.sh
*/1 * * * * sleep 15; /data/check_apache.sh
*/1 * * * * sleep 20; /data/check_apache.sh
*/1 * * * * sleep 25; /data/check_apache.sh
*/1 * * * * sleep 30; /data/check_apache.sh
*/1 * * * * sleep 35; /data/check_apache.sh
*/1 * * * * sleep 40; /data/check_apache.sh
*/1 * * * * sleep 45; /data/check_apache.sh
*/1 * * * * sleep 50; /data/check_apache.sh
*/1 * * * * sleep 55; /data/check_apache.sh

 

注意:

60必须能整除间隔的秒数(没有余数),例如间隔的秒数是2,4,6,10,12等。

posted @ 2020-11-05 09:27  itcaigen  阅读(551)  评论(0)    收藏  举报