サービスを中断することなく、古い nginx 実行可能ファイルを新しい実行可能ファイルに置き換えることができます。(新しいバージョンにアップグレードするとき、またはサーバー モジュールを追加/削除するときに) 新しいリクエストが失われることはありません。 (推奨学習: nginx の運用と保守)
まず、新しい実行可能プログラムを使用して古いプログラムを置き換えてから (バックアップを作成することをお勧めします)、USR2 (kill-USR2pid) シグナルをメイン プロセスに送信します。
メイン プロセスは、.pid ファイルの名前を .oldbin (例: /usr/local/nginx/logs/nginx.pid.oldbin) に変更し、新しい実行可能プログラムを実行して、新しいメイン プロセスと新しい作業を順番に開始します。プロセス:###### PIDPPIDUSER%CPUVSZWCHANCOMMAND
331261root0.01164pauseenginx:masterprocess/usr/local/nginx/sbin/nginx
3313433126nobody0.01368kqreadnginx:workerprocess(nginx)
3313533126nobody0.01380kqreadnginx:workerprocess(nginx)
3313633126nobody0.01368kqreadnginx:workerprocess(nginx)
3626433126root0.01148pauseenginx:masterprocess/usr/local/nginx/sbin/nginx
3626536264nobody0.01364kqreadnginx:workerprocess(nginx)
3626636264nobody0.01364kqreadnginx:workerprocess(nginx)
3626736264nobody0.01364kqreadnginx:workerprocess(nginx)
現時点では、2 つの nginx インスタンスが同時に実行され、受信リクエストを一緒に処理します。古いインスタンスを段階的に廃止するには、古いマスター プロセスに WINCH シグナルを送信する必要があります。そうすると、そのワーカー プロセスが正常にシャットダウンを開始します:
PIDPPIDUSER%CPUVSZWCHANCOMMAND
331261root0.01164pauseenginx:masterprocess/usr/local/nginx/sbin/nginx
3313533126nobody0.01380kqreadnginx:ワーカープロセスがシャットダウンしています(nginx)
3626433126root0.01148pauseenginx:masterprocess/usr/local/nginx/sbin/nginx
3626536264nobody0.01364kqreadnginx:workerprocess(nginx)
3626636264nobody0.01364kqreadnginx:workerprocess(nginx)
3626736264nobody0.01364kqreadnginx:workerprocess(nginx)
一定の時間が経過すると、古いワーカー プロセスは接続されているすべてのリクエストを処理して終了し、新しいワーカー プロセスのみが受信リクエストを処理します:
PIDPPIDUSER%CPUVSZWCHANCOMMAND
331261root0.01164pauseenginx:masterprocess/usr/local/nginx/sbin/nginx
3626433126root0.01148pauseenginx:masterprocess/usr/local/nginx/sbin/nginx
3626536264nobody0.01364kqreadnginx:workerprocess(nginx)
3626636264nobody0.01364kqreadnginx:workerprocess(nginx)
3626736264nobody0.01364kqreadnginx:workerprocess(nginx)
現時点では、古いサーバーはリッスンしているソケットをまだ閉じていないため、次の手順に従って古いサーバーを復元できます。 HUP シグナルを古いマスター プロセスに送信します。設定ファイルを再ロードせずにワーカー プロセスを開始します。
新しいメインプロセスに QUIT シグナルを送信し、動作中のプロセスを静かにシャットダウンするよう要求します。 新しいメインプロセスに TERM シグナルを送信して強制終了します。
新しいワーカー プロセスが何らかの理由で終了できない場合は、KILL シグナルを送信します。
新しいメイン プロセスが終了すると、古いメイン プロセスは .oldbin プレフィックスを削除し、.pid ファイルに復元します。このようにして、すべてがアップグレード前の状態に復元されます。
アップグレードの試行が成功し、新しいサーバーも維持したい場合は、古いメイン プロセスに QUIT シグナルを送信して終了し、新しいサーバーのみを実行したままにします。 PIDPPIDUSER%CPUVSZWCHANCOMMAND
362641root0.01148pauseenginx:masterprocess/usr/local/nginx/sbin/nginx
3626536264nobody0.01364kqreadnginx:workerprocess(nginx)
3626636264nobody0.01364kqreadnginx:workerprocess(nginx)
3626736264nobody0.01364kqreadnginx:workerprocess(nginx)
以上がnginxの運用保守でスムーズにアップグレードする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。