ApacheやNginxの新しい設定をした時にconfigtest
がありますが、もっと早くシンタックスチェックする方法を紹介。
手法の比較
種類 | Apache | Nginx |
---|---|---|
service系 | service httpd configtest | service nginx configtest |
default | apachectl configtest | nginx -t |
お勧め | httpd -t | nginx -t |
RHELにはserviceコマンドがあり、
Apacheユーザには慣れ親しんだconfigtest
という記述方法でNginx含めシンタックスチェックが可能です。
serviceコマンド自体はinit.dの配下のスクリプトを実行する訳ですが、
その実態が呼び出しているコマンドを直接叩くと楽で早いです。
service
という文字列自体、キーが飛び飛びで打ちにくいですし、
-t
はApacheもNginxも共通なので覚えやすくてとても楽です。
ただしシンタックスチェックのみが無難
そのNginxやApacheですが、コマンドラインから同様に直接実行することも可能です。 ただし、通常利用であれば、シンタックスチェックのみの利用をとどめておくべきです。
理由はシンプルで、デーモン起動するにあたり、 init.dのスクリプトも大きな役割を果たしているからです。
以下が/etc/rc.d/init.d/nginx
の例です。
nginx="/usr/sbin/nginx"
prog=$(basename $nginx)
sysconfig="/etc/sysconfig/$prog"
lockfile="/var/lock/subsys/nginx"
pidfile="/var/run/${prog}.pid"
NGINX_CONF_FILE="/etc/nginx/nginx.conf"
[ -f $sysconfig ] && . $sysconfig
start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
echo -n $"Starting $prog: "
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
ご覧の通り、startを実行するにあたり、 統一されたlockfileやpidfileを指定してくれるようになっています。 すなわち実行するユーザに依存せず、デーモンを一律で管理できるようになっています。
さらにいえば、init.d
にて直接実行するより、serviceコマンド経由で実行するべきです。
なぜならservice経由であれば、環境変数なども統一して実行してくれます。
# serviceコマンドを活用する
$ service nginx restart
直接影響が出る可能性は少ないかもしれません。 しかし無用なトラブルの元を減らすという意味でも、service経由の起動をお勧めします。
参考: デーモンの起動・終了にはserviceコマンドを利用しよう http://heartbeats.jp/hbblog/2013/06/service-start-stop.html
結論
上記を全て総合すると、シンタックスチェックから再起動までの流れは以下で決定です。
## Apache
$ httpd -t
$ service httpd restart
## Nginx
$ nginx -t
$ service nginx restart