요즘 내 블로그 는 항상 다운되어 있고 centos6.2+apache2.2+mysql5.5+php5.3
.MaxClients
httpd.conf
httpd/error_log
그렇다면 마지막 메시지를 읽고 자동으로 아파치를 다시 시작하기 위해 쉘 스크립트(crontab을 사용하여 10분마다 실행)를 작성하는 것이 가능합니까 preg_match
sending a SIGTERM
?
답변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
실행 파일의 이름
line 도 마찬가지입니다 killlall
. CentOS의 실행 파일 이름은 httpd
.
크론탭 항목
Apache를 중지/시작할 수 있는 적절한 권한을 가지려면 cron을 루트로 실행해야 합니다.