`server reach MaxClients` の場合に Apache を再起動するシェル スクリプトの書き方

`server reach MaxClients` の場合に Apache を再起動するシェル スクリプトの書き方

最近、私のブログは常にシャットダウンし、 を使用していますcentos6.2+apache2.2+mysql5.5+php5.3。 で立ち上げましたMaxClientshttpd.conf、あまり役に立ちません。

httpd/error_logでは、最後のメッセージがpreg_match sending a SIGTERMApache を自動的に再起動するかどうかを読み取り、シェル スクリプト (crontab で 10 分ごとに実行) を作成することは可能ですか?

答え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

crontabエントリ

この cron は、Apache を停止/起動するための適切な権限を持つように、root として実行する必要があります。

関連情報