こんにちは、粟野です。
24時間365日、比較的安定して稼働してくれているapacheですが、たまに機嫌が悪くなり再起動が必要になることがあります。
そんな場合はWebサーバの再起動を行うのですが、通常は以下のコマンドで問題なく完了します。
#/etc/init.d/httpd restart
httpd を停止中: [ OK ]
httpd を起動中: [ OK ]
普段はこれだけで再起動が完了してしまうのですが、この手順で正常に起動しない場合はちょっと面倒なことになります。
そこで今回は、そんな時どこから調べていくのかを簡単にご紹介したいと思います。
■statusを確認する
※予め「/etc/init.d/httpd status」等でプロセスIDを調べておくと役に立ちます。
# /etc/init.d/httpd status
httpd (pid 6000) を実行中...
プロセスが正常に起動しているように見えます。
正しく起動していない場合は「httpd は停止しています」「httpd は停止していますがサブシテムがロックされています」「httpd が停止していますが PID ファイルが残っています」と表示されます。
・「httpd は停止しています」の場合
何らかの原因で起動できていません。
設定ファイルが壊れている場合や、間違っている場合が考えられますので、「/etc/init.d/httpd configtest」を実施してみたり、apacheのログファイルを見て原因を探ります。
・「httpd (pid 6000) を実行中…」の場合
pidファイルとプロセスが残っているか既に立ち上がっています。
ブラウザから接続確認等を行なってみます。正しく表示されない場合は、apacheのrootプロセスが正しく終了しなかった、動作が不安定な事が考えられますので、手動でkillしてみます。(但し、再起動前のプロセスIDと同じ場合は再起動されていないという事になります。)
・「httpd は停止していますがサブシステムがロックされています」の場合
何らかの原因で起動しません。「/var/lock/subsys/httpd」にロックファイルが残っている場合もこのエラーになります。
システムに問題のない場合はstartを実施してみると、うまい具合にロックファイルを更新してくれます。
・「httpd が停止していますが PID ファイルが残っています」の場合
システムに問題のない場合はstartを実施してみると、うまい具合にPIDファイルを更新してくれます。
■再起動してみる
対応を実施し、再度再起動してみます。
#/etc/init.d/httpd restart
httpd を停止中: [失敗]
httpd を起動中: [ OK ]
・起動した場合
対応完了
■起動したメッセージが表示されて実際には起動しない場合
どうしてもプロセスが起動しない場合は、エラーログ「/var/log/httpd/error.log」を確認します。
[Mon Jun 01 00:00:00 20xx] [emerg] (28)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!: Couldn't create accept lock
[Mon Jun 01 00:00:00 20xx] [emerg] (28)No space left on device: Couldn't create accept lock
これらのエラーが記録されている場合は、Apache がセマフォを使いきっていることが考えられます。
セマフォを確認します。
# ipcs -s | grep apache
0x00000000 47415398 apache 600 1
0x00000000 47448167 apache 600 1
0x00000000 47480936 apache 600 1
0x00000000 47743081 apache 600 1
起動していない状態でapacheの表記があることがおかしいので、セマフォを開放するために下記コマンドを実行。
# for semid in `ipcs -s | grep apache | cut -f2 -d" "`; do ipcrm -s $semid; done
これにより、メモリが解放された事を確認します。
# ipcs -s | grep apache
WEBサーバの起動してみます
# /etc/init.d/httpd start
httpd を停止中: [失敗]
httpd を起動中: [ OK ]
■それでも起動しない場合
初心に戻って、ディスク容量、iノード、メモリの状態などを再度確認します。
この段階で起動させることができないと、本腰を入れて障害対応となりますので今回は割愛します。
以上、apacheが正しく起動できない場合の対応例でした。
Apacheが上手く起動しない場合にお役に立てれば幸いです。
※本内容はCentOS+Apache構成での対応の一例です。参考例としてご参照下さい。作業の前は必ずコンテンツ等のバックアップを取ることをお勧めします。