そもそも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, INT Quick shutdown
QUIT Graceful shutdown
KILL Halts a stubborn process
HUP

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

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が良さそう!と思いきや、
結局Nginxの親プロセスと子プロセスの動きを理解してなかったためそんな判断をしてしまったということです。これで起動スクリプトに先ほどのコマンドとnginx startを追記すれば、次回から/etc/init.d/nginx gracefulが使えるようになりますね!

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

カテゴリー: Nginx

adachi.ryo

1989年生まれのSRE。ホスティングから大規模なアドテクなどのインフラエンジニアとして携わる。 現在はサービスの信頼性向上、DevOps、可用性、レイテンシ、パフォーマンス、モニタリング、オブザーバビリティ、 緊急対応、AWSでのインフラ構築、Docker開発環境の提供、IaC、新技術の検証、リファクタリング、セキュリティ強化を担当している。 個人事業主では数社サーバー保守とベンチャー企業のインフラコンサルティングを行うほか、TechBullを創業し、ジュニアエンジニアのコミュニティを運営している。さらに、エンジニア向けYouTubeメディア「TECH WORLD」ではSRE関連の動画に出演し、過去には脆弱性スキャナ「Vuls」のOSS活動にも貢献。 ガジェット系エンジニアYouTuberとしても発信。

0件のコメント

コメントを残す

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