Pocket

そもそもApacheのgracefulは馴染みやすいと思いますが、nginxでのgracefulって起動スクリプトにない!?イマイチよくわかっていなかったのでブログします。まずは、restartとgracefulの違いについて紹介します。


■restart

クライアントとの通信が強制的に切断してしまい、
クライアントにご迷惑をお掛けしてしまう。

■graceful

すべてのクライアントとの通信が終了するまで再起動しない!
再起動したとしてもゆるやかに。

つまりrestartはプロセスを強制的にkillして、gracefulは様子見てkillしてる感じです。


■Apacheでのgraceful

基本起動スクリプトを見ればそれぞれのgracefulがどうやって再起動しているのか確認できます。

結局、apachectlコマンドでgracefulしているのが分かります。


■じゃあnginxのgracefulはどうやっているのか

Here’s how to send the QUIT (Graceful Shutdown) signal to the NGINX master process:
訳:nginxのマスター・プロセスにQUIT(gracefulな停止)信号を送る方法は次のとおりです。

  • QUIT以外のコマンド
TERM, INTQuick shutdown
QUITGraceful shutdown
KILLHalts a stubborn process
HUP

Configuration reload
Start the new worker processes with a new configuration
Gracefully shutdown the old worker processes

USR1Reopen the log files
USR2Upgrade Executable on the fly
WINCHGracefully shutdown the worker processes
シグナル名動作
TERM, INT即座にシャットダウン
QUITグレイスフルなシャットダウン
KILLしぶといプロセスを停止させる
HUP設定のリロード
USR1ログファイルを再オープンする
USR2実行ファイルをオンザフライで更新する
WINCHワーカープロセスをグレイスフルにシャットダウンする

■まとめ

gracefulなシャットダウンって結局プロセスkillするからプロセスなくなるんじゃないのか!?と勘違いしてHUPが良さそう!と思いきや、
結局Nginxの親プロセスと子プロセスの動きを理解してなかったためそんな判断をしてしまったということです。これで起動スクリプトに先ほどのコマンドとnginx startを追記すれば、次回から/etc/init.d/nginx gracefulが使えるようになりますね!

参考:https://www.nginx.com/resources/wiki/start/topics/tutorials/commandline/#

Pocket

カテゴリー: Nginx

adachin

1989年生まれのSRE。ホスティングから大規模なアドテクなどのインフラエンジニアとして携わる。現在はサービスの信頼性向上、DevOps、可用性、レイテンシ、パフォーマンス、モニタリング、オブザーバビリティ、緊急対応、AWS/Azureでのインフラ構築、Docker開発環境の提供、Kubernetes保守、インフラコード化、新技術の検証、リファクタリング、セキュリティ強化、エンジニア採用広報などを担当している。個人開発では「夫婦、パートナー向け家事管理サービス/famii」をCakePHPで開発中。個人事業主では数社サーバー保守とベンチャー企業のインフラコンサルティングやMENTAで未経験者にインフラのコーチング/コミュニティの運用を実施している。また、「脆弱性スキャナVuls」のOSS活動もしており、自称エバンジェリスト/技術広報/テクニカルサポート/コントリビュータでもある。

0件のコメント

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください