本番稼働中のサーバのApacheの設定を変更したり、新しくホストを追加する作業には神経を使う。 サイトを止めないよう、できるだけ安全にApacheの設定を変更するコマンドと手順を紹介する。
※間違いがあるかもしれません。コマンドを実行される前にApacheのドキュメントをご確認ください。
環境
- CentOS 7.4
- Apache 2.4
コマンドは基本apachectl
を使っていきます。
systemctl
、httpd
、/etc/rc.d/init.d/httpd2
とたくさんあるので対応したコマンドも載せておく。
restartは使わないで
環境構築のときはrestart
をよく使うかもしれませんが、
Apacheが止まってはまずい状況では使わないで下さい。
restart
はApacheを停止してから起動します。
設定を間違えていた場合、修正する時間サイトが停止してしまいます。
また、誰かがサイトにアクセス中だと子プロセスが走っていますが、restart
は子プロセスをkillします。
configtest
でconfの構文チェックgraceful
で緩やかに再起動させる
以上の手順を踏まれた方が安全に設定を反映できます。
設定ファイルの変更後の確認 configtest
apachectl configtest
もしくはapachectl -t
confファイルを書き換えた後は記述が正しいかconfigtest
で確認できます。
構文が間違っているとエラー箇所を教えてくれますし、正しくてもディレクトリがない場合もWarningで教えてくれます。
$ sudo apachectl configtest
Syntax OK
問題なければSyntax OK
となる。
# 権限がない場合の例
$ apachectl -t
Syntax error on line 31 of /etc/httpd/conf.d/ssl.conf:
SSLPassPhraseDialog: file '/root/bin/echo_passphrase' does not exist
権限も検知してくれる。
# DocumentRootのディレクトリがない場合の例
$ sudo apachectl configtest
AH00112: Warning: DocumentRoot [/var/www/app/public] does not exist
Syntax OK
構文エラーがなくとも、Warningを示してくれる。 エラーもWarningも全て修正しておきたい。
$ httpd -t
$ httpd configtest
$ /etc/init.d/httpd configtest
また、バーチャルホストの設定をしていた場合、httpd -t -D DUMP_VHOSTS
でバーチャルホストの一覧を確認できる。
Apacheを止めずに設定反映 graceful
apachectl -k graceful
graceful
は緩やかな再起動です。
子プロセスは現在の処理を完了してから終了します。
親プロセスは設定を反映しておき、新しい子プロセスから新しい設定で動かす。
また、再起動前に構文チェックが走りエラーがある場合再起動されない。 (※これでも正しく再起動することは保証されていないため、事前にチェックは必要)
$ sudo apachectl -k graceful
正しく再起動できた場合特に表示はない。
$ httpd -t
$ httpd configtest
$ /etc/init.d/httpd configtest
systemctl
ではsystemctl reload httpd
がほぼ同じコマンド。
httpdがもし立ち上がらなかったら
$ sudo cat /var/log/httpd/error_log
/var/log/httpd/error_log
にエラーログがある。
読んでググれば大体検討は付くはず。
参考
何かあったらこれをまず見る。
ログの操作も載っている。
http -t
とapachectl configtest
は環境変数を読み込むか読み込まないかの違いがあるらしい。
graceful
が「プロセスが終わるのを待ってから新しい設定を反映させる」か検証された記事。
reload
は子プロセスの終了を待つが、graceful
は子プロセスを強制終了させるらしい。(ドキュメントと異なる?)
graceful
、restart
の挙動の違いがわかりやすい。