わたし「vhosts変更したので、サーバーの再起動をお願いします。gracefulで大丈夫です」
後輩「gracefulってなんですか?」
このやりとり、わたしも昔やったなあと思いつつ、復習がてらにまとめておきます。
- 前提としている環境
- (おさらい)apacheの起動・停止に使うコマンド
- apacheの再起動のコマンドと違い(restart/condrestart/reload/graceful)
- restartよりもgracefulを使うわけ
- graceful-stopというものも
- apacheでエラーになったときはバージョン確認を
- わからないことメモ
前提としている環境
- apache 2.2 / 2.4
- CentOS6.x系(Linux OS であればほぼ同じ?)
(おさらい)apacheの起動・停止に使うコマンド
apacheの起動
下記のいずれか。
$ service httpd start
/etc/init.d/httpd start
apachectl start
/usr/local/apache/bin/apachectl start
apacheの停止
下記のいずれか
$ service httpd stop
/etc/init.d/httpd stop
apachectl stop
/usr/local/apache/bin/apachectl stop
apacheの再起動のコマンドと違い(restart/condrestart/reload/graceful)
restart
WEBサービスを今すぐ終了して再起動を行います。実行中のリクエストの処理は中止されます。
- 親プロセス:子プロセスをすべて終了後、親プロセスも終了。起動処理の際に親プロセスのIDは変更されます。
- TERMシグナルを送信してプロセスを即時終了した後(=停止処理)、連続して開始処理を行います。開始処理の際に、設定の変更が適用されます。
condrestart
WEBサービスを今すぐ終了して再起動を行います。実行中のリクエストの処理は中止されます。
restartの処理と流れは同じですが、apacheが起動されているときのみ再起動が行われます。
reload
WEBサービスを終了しないで、変更した設定の反映を行う。実行中のリクエストの処理は中止されます。
- 子プロセス:HUPシグナル(SIGHUP)が送信され、子プロセスが終了します。
- 親プロセス:終了しません。子プロセスがすべて終了したあと、親プロセスは設定を再読込して変更を適用します。
親プロセスをとめずに、変更後の設定の反映だけを行いたい場合に使用します。
graceful
WEBサービスを終了しないで、変更した設定の反映を行います。実行中のリクエストの処理は中止されません。
- 子プロセス:USR1シグナルが送信され、子プロセスが終了します。ただし、実行中のリクエスト処理が完了した後に、子プロセスの終了が行われます。
- 親プロセス:子プロセスをすべて終了後、親プロセスは設定を再読込して変更を適用します。
restartよりもgracefulを使うわけ
gracefulの場合、実行中のリクエストを即時終了しないので、他の開発者やサービス利用中のユーザーに優しいのです。
いきなりゲーム機のコンセントを引き抜くお母ちゃんと、「今のダンジョン終わったらコンセント抜くからねー終わったら教えてねー」と声かけてくれるお母ちゃんと、どっちがいいか?というと後者ですよね・・・
とはいえ、
gracefulだと反映されない設定変更もあるので、gracefulでも反映されない場合や、httpd.confとかを変更した場合は、タイミングをみてrestartが良さそうです。
graceful-stopというものも
apacheを停止するとき、stop
でなくgraceful-stop
を使うこともできるようです。
graceful-stopは、処理中のリクエストが終了をまって、すべての子プロセスを終了し、親プロセスを終了します。
※ GracefulShutdownTimeout で設定した時間がすぎると、子プロセス処理中でも、残りの子プロセスにTERMシグナルが送信され、強制終了となります。
apacheでエラーになったときはバージョン確認を
apacheでエラーになったときに多かったのが、「バージョンによる文法・コマンドの違い」でした。
(apacheに限ったことではなく、サーバーや他アプリケーションでも同じことですが・・・!)
そのため、「ドキュメント通りにやってるのにエラーになる!」というときは、ドキュメントの対象としているバージョンと現在使っているapacheのバージョンが一致しているか確認しましょう。
サーバーのバージョンを確認することで、実行中のapacheのバージョンを確認できます。
サーバーの確認方法はこちら↓
$ httpd -v
わからないことメモ
- CentOS 7.系だと、systemctlコマンドを使うらしいけど、apachectlやservice httpd は使えない?
- service httpd と /etc/init.d/httpd と apachectl の違いがよくわからない。

Apacheクックブック 第2版 ―Webサーバ管理者のためのレシピ集
- 作者:Ken Coar,Rich Bowen
- 発売日: 2008/09/26
- メディア: 大型本

できるPRO Apache Webサーバー 改訂版 Version 2.4/2.2/2.0対応 できるPROシリーズ
- 作者:辻 秀典,渡辺 高志,鈴木 幸敏,できるシリーズ編集部
- 発売日: 2013/02/17
- メディア: Kindle版
![サーバ構築の実際がわかる Apache[実践]運用/管理 (Software Design plus) サーバ構築の実際がわかる Apache[実践]運用/管理 (Software Design plus)](https://m.media-amazon.com/images/I/51qAG+e+baL._SL160_.jpg)
サーバ構築の実際がわかる Apache[実践]運用/管理 (Software Design plus)
- 作者:鶴長 鎮一
- 発売日: 2012/03/23
- メディア: 単行本(ソフトカバー)