jim212jim

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