Webサービスを停止する場合には、実行中のリクエストの処理をどう扱うかを考えた上で、適切な方法を採らなくてはなりません。扱いの考え方には次の2通しがあります。
- 実行中のリクエストの処理を中止して、即時停止する。
- 実行中のリクエストの処理が完了するのを待ってから停止する。
ここでは、それぞれの場合に、Apache httpd ではどのような方法を採るのかを整理しておきます。
実行コマンドは次の2通りです。それぞれにオプションがありますが、どちらのコマンドでも同じ処理を行います。
- httpd -k オプション
- apachectl -k オプション
オプションは次の2通りです。
1.stop
httpd プロセスにTERMシグナル(SIGTERM)を送って、プロセスを即終了します。
処理中のリクエストはすべて中止して、すべての子プロセスを終了してから、親プロセスも終了します。
2.graceful-stop
httpd プロセスにWINCHシグナル(SIGWINCH)を送って、子プロセスを終了します。
ただし、子プロセスは実行中のリクエストの処理が完了してから終了します。親プロセスは、すべての子プロセスが終了したあとに終了します。
実行中のリクエスト処理の扱いと適切な停止コマンドオプション
実行中のリクエスト処理の扱いの違いによる実行コマンドオプションの対応を下表に整理します。
実行中のリクエスト処理の扱い | 実行コマンドオプション |
---|---|
実行中のリクエストの処理を中止して、即時停止する。 | httpd -k stop apachectl -k stop |
実行中のリクエストの処理が完了するのを待ってから停止する。 | httpd -k graceful-stop apachectl -k graceful-stop |