最近我的博客总是关闭,它使用centos6.2+apache2.2+mysql5.5+php5.3
.我已经筹集MaxClients
了httpd.conf
,但不太有用。
那么是否可以编写一个 shell 脚本(每 10 分钟使用 crontab 运行一次)来读取httpd/error_log
最后一条消息是否preg_match
sending a SIGTERM
自动重新启动 apache?
答案1
解析日志文件可能非常棘手。与其尝试这样做,您可能最好使用一个脚本,例如可以从 crontab 条目运行的脚本。该脚本将尝试访问服务器,如果不成功,则会重新启动 Apache。
脚本
脚本来源:bash脚本自动重启Apache
#!/bin/sh
# Script that checks whether apache is still up, and if not:
# - e-mail the last bit of log files
# - kick some life back into it
# -- Thomas, 20050606
PATH=/bin:/usr/bin
THEDIR=/tmp/apache-watchdog
[email protected]
mkdir -p $THEDIR
if ( wget --timeout=30 -q -P $THEDIR http://localhost/robots.txt )
then
# we are up
touch ~/.apache-was-up
else
# down! but if it was down already, don't keep spamming
if [[ -f ~/.apache-was-up ]]
then
# write a nice e-mail
echo -n "apache crashed at " > $THEDIR/mail
date >> $THEDIR/mail
echo >> $THEDIR/mail
echo "Access log:" >> $THEDIR/mail
tail -n 30 /var/log/apache2_access/current >> $THEDIR/mail
echo >> $THEDIR/mail
echo "Error log:" >> $THEDIR/mail
tail -n 30 /var/log/apache2_error/current >> $THEDIR/mail
echo >> $THEDIR/mail
# kick apache
echo "Now kicking apache..." >> $THEDIR/mail
/etc/init.d/apache2 stop >> $THEDIR/mail 2>&1
killall -9 apache2 >> $THEDIR/mail 2>&1
/etc/init.d/apache2 start >> $THEDIR/mail 2>&1
# send the mail
echo >> $THEDIR/mail
echo "Good luck troubleshooting!" >> $THEDIR/mail
mail -s "apache-watchdog: apache crashed" $EMAIL < $THEDIR/mail
rm ~/.apache-was-up
fi
fi
rm -rf $THEDIR
路径
停止/启动脚本的路径需要根据您的发行版安装 Apache 的位置进行相应调整。像这样的行:
/etc/init.d/apache2 start >> $THEDIR/mail 2>&1
如果你使用的是 CentOS,会是这样的:
/etc/init.d/httpd start >> $THEDIR/mail 2>&1
可执行文件的名称
线条也是如此killlall
。 CentOS 上可执行文件的名称是httpd
.
crontab 条目
该 cron 需要以 root 身份运行,以便它具有停止/启动 Apache 的适当权限。