LINEで送る
Pocket

Adachinですっ。

そもそもapacheのgracefulは馴染みやすいと思いますが、

nginxでのgracefulって起動スクリプトにない!?

どうやって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がいいと思います!と
先輩に伝えたら、爆笑され、怒られましたがw
結局nginxの親プロセスと子プロセスの
動きを理解してなかったためそんな判断をしてしまったということです。

これで起動スクリプトに先ほどのコマンドとnginx startを追記すれば、
次回から/etc/init.d/nginx gracefulが使えるようになりますね!

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

LINEで送る
Pocket

カテゴリー: BlogNginx

adachin

1989年生まれのSRE。 ホスティングから大規模なアドテクなどのインフラエンジニアとして携わり、AnsibleやTerraformでのインフラコード化を推進。未経験によるエンジニアのメンターなども実施している。また、「脆弱性スキャナVuls」のOSS活動もしており、自称エバンジェリスト/技術広報/テクニカルサポート/コントリビュータでもある。現在はサービスの信頼性向上、可用性、レイテンシ、パフォーマンス、モニタリング、緊急対応、インフラコード化、リファクタリング、セキュリティ強化、新技術の検証、Docker開発環境の提供、AWSでのインフラ構築、Wordpressによるコーポレートサイトの修正、メンター、分析基盤の運用を担当している。

0件のコメント

コメントを残す

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