我想要编写一些内容,以便在我的Apache服务器死机时重新启动HTTPD服务

时间:2016-12-23 作者:Duncan Edwards

我是一个在t2上运行的中型烹饪博客的“系统管理员”。小型EC2实例,并在灯堆栈上使用WordPress。尽管它是一个相当糟糕的“系统管理员”,但它实际上运行非常可靠和高效,尽管传输了大量流量。我已经尽了我所能,但偶尔(大约每年一次)有人设法用DDOS类型的攻击来打击它。通常会发生的情况是,apache服务器死亡,任何从网站请求任何内容的人都会得到HTTP超时。重新启动httpd服务立即修复了该问题。

我想做的是安排一个CRON作业,每5分钟给网站打一次电话,如果它发现超时超过两次,就会重新启动httpd服务并给我发送一封电子邮件。现在,这不是那种“我无法正确设置apache服务器,所以我会每小时重新启动一次”的解决方案。apache经过调整,在没有被黑客攻击的情况下运行良好。我已经尽可能多地加入了防火墙反黑客最佳实践。我的理由基本上是“黑客和疯子总是在寻找新的方法来打击我,当他们这样做时,我宁愿有10分钟的停机时间和一封电子邮件,而不是潜在的数小时停机时间(如果我睡着了或不在家的话)”。问题是,这是一个好的解决方案,还是有更好、更系统化的方法来使用一些现有技术来实现这一点?

1 个回复
SO网友:prosti

你需要这样的东西:

#!/bin/bash
#test-httpd.sh
client="yourname"
mailboxes="[email protected]"
# write to that file
monitorfile="/var/www/html/monitor.php"

#empty monitor.php
> $monitorfile

APACHE=`/bin/pidof httpd`
echo $APACHE

if [ "$APACHE" == "" ]
   then
    echo APACHE_FAILURE  | mail -s "$client"": CRITICAL : APACHE FAILURE !!!!" $mailboxes
#trying to restart it
    /etc/init.d/httpd stop
    /etc/init.d/httpd start
    echo -e "apache:FAIL\\n" >> $monitorfile
else
    echo -e "apache:OK\\n" >> $monitorfile
fi
最后,您需要一个cron作业来执行此脚本test-httpd.sh 每一分钟。

这可能在您的crontab中

#check httpd
* * * * *   root    /opt/misc/test-httpd.sh  > /dev/null 2>&1