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等。

浙公网安备 33010602011771号