Apacheの設定変更をした後、新しい設定を適用したいけど動いているサービスは止めたくない。そういう場合はどうすべきか。
Apacheの停止と再起動
以下、公式サイトの説明より。
急な停止
1 |
# apachectl -k stop |
- 即座に子プロセス全てをkillしようとする。
- 子プロセスを完全にkillし終わったら親プロセス自身が終了する。
- 処理中のリクエストはすべて停止され、もはやリクエストに対する応答はされない。
急な再起動
1 |
# apachectl -k restart |
- 子プロセスをkillするが、親プロセスは終了しない。
- 設定ファイルを再読込して、ログファイルを全て開きなおす。
- その後、新しい子プロセスを起動して応答を続ける。
緩やかな停止
1 |
# apachectl -k graceful-stop |
- 親プロセスは子プロセスに現在処理中のリクエストの後に終了するようにアドバイスする。
- その後親プロセスはPidFileを削除し、ポートでのListenを全て停止する。
- 親プロセスはどの子プロセスがリクエスト処理中かを監視し続ける。
- 全ての子プロセスが終了するかGracefulShutdownTimeoutで設定した時間が過ぎると、親プロセスも終了する。
穏やかな再起動
1 |
# apachectl -k graceful |
- 子プロセスに現在のリクエストの処理の後に終了するようにアドバイスする。
- 親プロセスは設定ファイルを再読込して、ログファイルを開き直す。
- 子プロセスが徐々になくなるに従って、 新しい世代の設定による子プロセスに置き換えていく。
- そして、これらが新たなリクエストに即座に応答し始める
冒頭に書いたようなシチュエーションの場合、「穏やかな再起動」が適当だな。
参考サイト
Apache HTTP Server の停止と再起動 – Apache HTTP サーバ バージョン 2.4
https://httpd.apache.org/docs/2.4/ja/stopping.html
restartとreloadの違いを調べてみた – Qiita
https://qiita.com/miyuki_samitani/items/79ddc6bf645f51aab03d