There's an echo in my head

日々のメモ。

nginxにreloadシグナルを送っても設定を再読み込みしてくれなかったりなかなかKILLされなかったり

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 -TERMkill -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

なぜ一度ワーカーを殺す必要があったのかがイマイチわからなかったけど(マスターを殺せばワーカーも一緒に死んでくれるはず)、なんとか再起動できた。

参考

このブログに出てくるコードスニペッツは、引用あるいは断りがない限りMITライセンスです。