はじめに
今回もまた自宅のWebサーバーが起動しなくなってしまった。
はいー、当ブログを運用している自宅サーバーであるよ!
環境はCentOS7 Apache2.4
きっかけは、今回も、OSのアップデート
原因調査と対策
Process: **** ExecStop=/bin/kill -WINCH ${MAINPID}(code=exited, status=1/FAILURE)
で確認してみると、「httpdのPID(プロセスID)が既に存在していて起動に失敗」的なメッセージが出ている。
今までは、あせって色々やっているうち、再起動したら治ってたことがあったので、今回もしつこく再起動をしていたが、一向に治らない。
対策その1 httpdのプロセスを全てkillする
毎回NETで調べているのだがどうも以下のような対応がよさそうだ。
# 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(Webサーバーのデーモンプロセス)が生成されでしまうので!
#systemctl restart httpd
対策その2 2回以上httpdを再起動する。
#systemctl restart httpd
#systemctl status httpd
● httpd.service – The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: active (running) since 火 2020-11-17 02:05:41 JST; 3 weeks 1 days ago
Docs: man:httpd(8)
man:apachectl(8)
Main PID: 1283 (httpd)
Status: “Total requests: 282692; Current requests/sec: 0; Current traffic: 0 B/sec”
Tasks: 11
CGroup: /system.slice/httpd.service
|–1283 /usr/sbin/httpd -DFOREGROUND
|–2368 /usr/sbin/httpd -DFOREGROUND
|–2712 /usr/sbin/httpd -DFOREGROUND
|–3638 /usr/sbin/httpd -DFOREGROUND
|–3639 /usr/sbin/httpd -DFOREGROUND
|–4334 /usr/sbin/httpd -DFOREGROUND
|–4335 /usr/sbin/httpd -DFOREGROUND
|–4972 /usr/sbin/httpd -DFOREGROUND
|–4975 /usr/sbin/httpd -DFOREGROUND
|–5425 /usr/sbin/httpd -DFOREGROUND
|–5494 /usr/sbin/httpd -DFOREGROUND
どうも stop でhttpdを終了しただけでは、プロセス、PIDが残ってしまうようだ。restart だと stop & start と同じはずなのだが、httpdのプロセスが正常に終了する確率が高そうだ。ただ、restartを1回かけただけでは、PIDが正常に終了せず残ってしまうこともあるので、restartを2回かける。
対策その3 httpd24-httpd.serviceを自動起動させない。
後日、当サーバーにおいて根本的な対応を見つけた。
サービス①httpd.serviceを起動後に➁httpd24-httpd.serviceを起動しようとしたためだった。
ただ、この対策は私の環境に限定されるものかもしれない。
実践!CentOS7サーバー徹底構築改訂第2版 CentOS7(1708対応) [ 福田和宏 ] 価格:3278円 |
結局
対策その1 httpdのプロセスを全てkillする
対策その2 2回以上httpdを再起動する。
対策その3 httpd24-httpd.serviceを自動起動させない。(注意点あり)
対策その2が簡単でおすすめです。
だめなら、対策その1を試してみてください。
条件によっては対策その3が根本的な解決となる場合もあります。
セキュリティー関連
NextCloud関連
nextcloudのデータを移動してrootパーティションの空き容量を減らす
その他 CentOS運用時の困りごと
コメント