Edited at

「nginx実践ガイド」のコマンドのメモ

More than 1 year has passed since last update.

「nginx実践ガイド impress top gearシリーズ」のコマンド用のメモです。

環境はCentOS7です。


systemctlでの操作


  • 開始


    • systemctl start nginx

    • nginxを開始します。



  • 終了


    • systemctl stop nginx

    • nginxを停止します。



  • 再起動


    • systemctl restart nginx

    • nginxを再起動します。一度nginxを停止させるため、リクエストを受け付けできない時間が一瞬発生します。



  • 設定の再読み込み


    • systemctl reload nginx

    • 設定を再度読み込みます。新たなworkerプロセスを新たな設定で起動してから、古い設定のworkerプロセスでリクエスト処理中でないものを順次終了させるため、リクエストを受け付けできない時間が発生しません。



  • バイナリ入れ替え


    • /sbin/service nginx upgrade

    • nginxを再起動します。これはバイナリ入れ替え時のためのコマンドで、新たなmaster/workerプロセスを、新たなバイナリを使って起動してから、古いmaster/workerプロセスでリクエスト処理中でないものを順次終了させるため、リクエストを受け付けできない時間は発生しません。
      パッケージのアップデート時に自動的に実行されます。



  • 状態表示


    • systemctl status nginx

    • nginxがコンソールに出力したログや起動状態を表示します。デフォルトでは長い行が省略されますが、-lオプションを付けると表示されます。




停止動作の種類

一般的に、処理が終わるのを待ってから終了することをgraceful shutdown

処理の終了を待って再起動することをgraceful restartと表現します。

逆に、処理が終わるのを待たずに終了することをfast shutdownforce shutdownと呼びます。

「systemctl stop nginx」や「systemctl restart nginx」は、処理中のリクエストを打ち切るため、fast shutdownに分類できます。

graceful shutdownをするには、後述のシグナルやnginxコマンドを使う必要があります。


nginxコマンドでの操作

nginxのデーモンの実行ファイルは、何もオプションを指定しないとデーモンが起動します。

コマンド
内容

nginx -h
nginxコマンドのオプションなどを説明したヘルプを表示する

nginx -v
バージョン情報を表示する

nginx -t
設定ファイルをテストし、エラーの内容を表示する

nginx -T
設定ファイルをテストし、設定ファイルの内容を表示する。includeされたファイルは展開され、1本の設定ファイルとして表示される

nginx -V
バージョン情報、コンパイラのバージョンやコンパイルフラグを表示する。コンパイルフラグを見ることで、組み込まれているモジュールも確認できる

nginx -s stop
実行中のnginxデーモンを停止する。fast shutdown

nginx -s quit
実行中のnginxデーモンを停止する。graceful shutdown

nginx -s reopen
実行中のnginxデーモンにログファイルを開き直させる

nginx -s reload
実行中のnginxデーモンに設定ファイルを再読み込みさせる


シグナル送信での操作

systemctlやnginxコマンドによるnginxデーモンの制御は、実際はシグナルを送信して実現しています。

nginxデーモンはmasterプロセスとworkerプロセスに分かれていますが、それぞれのプロセスが処理できるシグナルには違いがあります。


masterプロセスで処理するシグナル

シグナル
内容

TERM/INT
masterおよぴworkerを終了する。fast shutdown

QUIT
masterおよびworkerを終了する。graceful shutdown

HUP
設定ファイルの再読み込み。新たなworkerを新たな設定で起動してから、古いworkerをgraceful shutdownさせる。タイムゾーンの変更にも対応している

USR1
ログファイルを開き直す

USR2
新たな実行ファイルで再起動する

WINCH
workerをgraceful shutdownさせる


workerプロセスで処理するシグナル

シグナル
内容

TERM/INT
終了する。fast shutdown。workerに直接送られた場合は、masterが新たなworkerを立ち上げる

QUIT
終了する。graceful shutdown

USR1
ログファイルを開き直す

WINCH
異常終了。デバッグのための機能

例えば、systemctl stop nginxはmasterプロセスにQUITシグナルとTERMシグナルを送る。

また、nginx -s reopenは、masterプロセスにUSR1シグナルを送る。

しかし、シグナルと処理内容は必ずしも直感的に対応付けられるものではなく、systemctlやnginxコマンドは、より直感的な操作といえる。


シグナルでの処理の仕方の例

# ps aux | grep nginx

root 3575 0.0 0.0 46364 964 ? Ss 08:29 0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx 3576 0.0 0.1 46764 1924 ? S 08:29 0:00 nginx: worker process
root 3584 0.0 0.0 112660 972 pts/1 R+ 08:55 0:00 grep --color=auto nginx`
# kill -QUIT 3575
# ps aux | grep nginx
root 3589 0.0 0.0 112660 976 pts/1 S+ 08:56 0:00 grep --color=auto nginx