Webサーバーが起動失敗 (code=exited, status=1/FAILURE)

CentOS
この記事は約3分で読めます。

今回もまたWebサーバーが起動しなくなってしまった。
環境はCentOS7 Apache2.4

きっかけは、今回も、OSのアップデート

原因は

# systemctl status httpd
Process: **** ExecStop=/bin/kill -WINCH ${MAINPID}(code=exited, status=1/FAILURE)

で確認してみると、「httpdのPID(プロセスID)が既に存在していて起動に失敗」的なメッセージが出ている。

今までは、あせって色々やっているうち、再起動したら治ってたことがあったので、今回もしつこく再起動をしていたが、一向に治らない。

対策は

毎回NETで調べているのだがどうも以下のような対応がよさそうだ。

#systemctl stop httpd
# lsof -i | grep http
httpd 6219 root 4u IPv6 48918 0t0 TCP *:http (LISTEN)
httpd 6219 root 6u IPv6 48926 0t0 TCP *:https (LISTEN)
httpd 6221 apache 4u IPv6 48918 0t0 TCP *:http (LISTEN)
httpd 6221 apache 6u IPv6 48926 0t0 TCP *:https (LISTEN)
httpd 6222 apache 4u IPv6 48918 0t0 TCP *:http (LISTEN)
httpd 6222 apache 6u IPv6 48926 0t0 TCP *:https (LISTEN)
httpd 6223 apache 4u IPv6 48918 0t0 TCP *:http (LISTEN)
httpd 6223 apache 6u IPv6 48926 0t0 TCP *:https (LISTEN)
httpd 6224 apache 4u IPv6 48918 0t0 TCP *:http (LISTEN)
httpd 6224 apache 6u IPv6 48926 0t0 TCP *:https (LISTEN)
httpd 6225 apache 4u IPv6 48918 0t0 TCP *:http (LISTEN)
httpd 6225 apache 6u IPv6 48926 0t0 TCP *:https (LISTEN)

表示されたhttpdに関するPID(赤マーカー)を強制終了(Kill)する。
ただし、一括してkillする。

1個1個だとkillしてるうちに新たなhttpdが生成されでしまうので!

#Kill -9 6219 6221 6222 6223 6224 6225
#systemctl restart httpd
start でもとりあえずWebサーバーは見れるのだが statusで状態をみると、まだ赤字でエラーっぽいメッセージが出るので restart にした方が良さそうだ!
もう1つの対応方法は2回以上httpdを再起動する
#systemctl restart httpd
#systemctl restart httpd
#systemctl status httpd

どうも stop でhttpdを終了しただけでは、プロセス、PIDが残ってしまうようだ。restart だと stop & start と同じはずなのだが、httpdのプロセスが正常に終了する確率が高そうだ。ただ、restartを1回かけただけでは、PIDが正常に終了せず残ってしまうこともあるので、restartを2回かける。念のためsystemctl status httpdを実行し(code=exited, status=1/FAILURE)が表示されていないか確認する。

こちらの対応の方がおすすめかも!

コメント

タイトルとURLをコピーしました