Software-Defined どさにっき 〜2015年3月上旬〜

by やまや
<< = >>

2015年3月2日(月)

apache の正しい再起動

_ うがー。またやってしまった。これまで何度も何度も同じ罠にひっかかってるのに、いつも後から気がついてやり直してる。ちっとは学習しろや。> 俺

_ apachectl restart は再起動ではない

_ SIGHUP を送るだけ。設定の読み直しとログの reopen。親プロセスは生き残る。確実にプロセスを起動しなおしたいなら、restart ではなく stop/start する必要がある。

_ apachectl ではなく、/etc/init.d/ やら /usr/local/etc/rc.d/ やらにあるスクリプトを使う場合も、

case "$1" in
...
restart)
    $0 stop
    $0 start
    ;;
のようになっていれば restart でいいけど、
case "$1" in
start|stop|restart|graceful|...)
   $httpd -f $conf -k $1
   ;;
のようになっていた場合は stop/start しないといけない。apachectl はまさに後者。つーか、graceful があれば restart なんていらんだろ…。何に使うんだよ。

_ ついでにもうひとつ罠。apachectl restart (httpd -k restart) は、プロセスが存在してない場合には start する。これは graceful も同じ。httpd はインストールしてるけど意図して起動させないようにしてある、という場合であっても、cron でログローテートする処理が登録されていると、そのタイミングで勝手に起動してしまう。小さな親切大きなお世話。ログの reopen は httpd -k graceful (or restart) で書いた方がスマートに見えるけど、そうではなく、kill -USR1 (or -HUP) を使うように書くことでそのような事態は避けられる。


<< = >>
やまや