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


「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