Adachinですっ。
そもそもapacheのgracefulは馴染みやすいと思いますが、
nginxでのgracefulって起動スクリプトにない!?
どうやってgracefulするんだああ!!!
イマイチよくわかっていなかったのでブログします。
まずは、restartとgracefulの違いについて紹介します。
■restart
クライアントとの通信が強制的に切断してしまい、
クライアントにご迷惑をお掛けしてしまう。
■graceful
すべてのクライアントとの通信が終了するまで再起動しない!
再起動したとしてもゆるやかに。
つまりrestartはプロセスを強制的にkillして、
gracefulは様子見てkillしてる感じです。
■apacheでのgraceful
基本起動スクリプトを見ればそれぞれのgracefulがどうやって再起動しているのか確認できます。
1 2 | $ less /etc/init.d/httpd apachectl -k graceful |
結局、apachectlコマンドでgracefulしているのが分かります。
■じゃあnginxのgracefulはどうやっているのか
とりあえず公式でググってみた。
Here’s how to send the QUIT (Graceful Shutdown) signal to the NGINX master process:
訳:nginxのマスター・プロセスにQUIT(gracefulな停止)信号を送る方法は次のとおりです。
1 2 3 4 5 | # kill -QUIT $( cat /usr/local/nginx/logs/nginx.pid ) # /etc/init.d/nginx start or # kill -QUIT $( cat /var/run/nginx.pid ) # /etc/init.d/nginx start |
・QUIT以外のコマンド
※枠が出なくてゴメンナサイ(泣)
TERM, INT | Quick shutdown |
QUIT | Graceful shutdown |
KILL | Halts a stubborn process |
HUP | Configuration reload |
USR1 | Reopen the log files |
USR2 | Upgrade Executable on the fly |
WINCH | Gracefully shutdown the worker processes |
・訳
シグナル名 | 動作 |
---|---|
TERM, INT | 即座にシャットダウン |
QUIT | グレイスフルなシャットダウン |
KILL | しぶといプロセスを停止させる |
HUP | 設定のリロード |
USR1 | ログファイルを再オープンする |
USR2 | 実行ファイルをオンザフライで更新する |
WINCH | ワーカープロセスをグレイスフルにシャットダウンする |
■まとめ
gracefulなシャットダウンって結局プロセスkillするから
プロセスなくなるんじゃないのか!?嘘ネット情報と勘違いしてHUPがいいと思います!と
先輩に伝えたら、爆笑され、怒られましたがw
結局nginxの親プロセスと子プロセスの
動きを理解してなかったためそんな判断をしてしまったということです。
これで起動スクリプトに先ほどのコマンドとnginx startを追記すれば、
次回から/etc/init.d/nginx gracefulが使えるようになりますね!
参考:https://www.nginx.com/resources/wiki/start/topics/tutorials/commandline/#
0件のコメント