`서버가 MaxClients`에 도달한 경우 쉘 스크립트를 작성하여 아파치를 다시 시작하는 방법

`서버가 MaxClients`에 도달한 경우 쉘 스크립트를 작성하여 아파치를 다시 시작하는 방법

최근 내 블로그는 항상 종료되어 centos6.2+apache2.2+mysql5.5+php5.3. 나는 MaxClients에서 키웠지만 httpd.conf덜 유용합니다.

httpd/error_log그렇다면 마지막 메시지가 아파치를 자동으로 다시 시작하는 경우 쉘 스크립트(10분마다 crontab으로 실행)를 작성하여 읽을 수 있습니까 preg_match sending a SIGTERM?

답변1

로그 파일을 구문 분석하는 것은 꽤 까다로울 수 있습니다. 그렇게 하기보다는 crontab 항목에서 실행할 수 있는 이와 같은 스크립트를 사용하는 것이 더 나을 것입니다. 이 스크립트는 서버에 액세스하려고 시도하며, 실패할 경우 Apache를 다시 시작합니다.

스크립트

스크립트 소스:Apache를 자동으로 다시 시작하는 bash 스크립트

#!/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.

크론탭 항목

이 크론은 Apache를 중지/시작할 수 있는 적절한 권한을 갖도록 루트로 실행해야 합니다.

관련 정보