nginxはreload
シグナルを送れば設定だけを再読み込みしてくれる。
# /usr/sbin/nginx -s reload
ただ今回は何度実行しても再読み込みをしてくれなかった。仕方がないのでstop/startで再起動しようとした。
# /usr/sbin/nginx -s stop # ps -ef | grep nginx root 3398 1 0 Jul19 ? 00:00:00 nginx: master process /usr/sbin/nginx nobody 17474 3398 0 Sep27 ? 00:00:00 nginx: worker process root 20190 20061 0 05:10 pts/1 00:00:00 grep nginx
stopしたのになぜご健在…。kill -TERM
やkill -KILL
を送っても同じ状態。強引だけど、試しにワーカーのほうを止めてみた。
# kill -TERM 17474 # ps -ef | grep nginx root 3398 1 0 Jul19 ? 00:00:00 nginx: master process /usr/sbin/nginx nobody 17474 3398 0 Sep27 ? 00:00:00 [nginx] <defunct> root 20305 20061 0 05:11 pts/1 00:00:00 grep nginx
こっちは素直に(?)死んでくれた。<defunct>
ってなってるのはゾンビプロセスってやつで、結局親プロセスが死なないことにはこれもちゃんと死んでくれない。ということでもう一度マスターをkill -KILL
してみた。
# kill -KILL 3398 # ps -ef | grep nginx root 21019 20061 0 05:17 pts/1 00:00:00 grep nginx
今度はちゃんと死んでくれた!!というわけで起動。
# /usr/sbin/nginx # ps -ef | grep nginx root 21061 1 0 05:17 ? 00:00:00 nginx: master process /usr/sbin/nginx nobody 21062 21061 0 05:17 ? 00:00:00 nginx: worker process root 23947 20061 0 05:39 pts/1 00:00:00 grep nginx
なぜ一度ワーカーを殺す必要があったのかがイマイチわからなかったけど(マスターを殺せばワーカーも一緒に死んでくれるはず)、なんとか再起動できた。