apache がセマフォを使い切る
遭遇しない人は一生遭遇しないであろう症状
# httpd -X
とかやって apache を起動、終了を繰り返していると、そのうち、
[Mon Feb 09 17:54:50 2009] [crit] (28)No space left on device: mod_rewrite: could not create rewrite_log_lock Configuration Failed
というメッセージをエラーログに吐いて、httpd が起動してすぐ終了してしまう(起動してない)という症状が出るようになる。
# ipcs -s ------ Semaphore Arrays -------- key semid owner perms nsems 0x00000000 11272192 daemon 600 1 0x00000000 11304961 daemon 600 1 ...
と、延々100行以上表示される。セマフォが開放されていないのだ。(owner は環境によって異なる)
# apachectl start # apachectl stop
を使用すると正しく開放される。apachectl の中でセマフォ面倒が見られてるということだ。なんで、通常は httpd を直接呼ぶようなことはしなければいい。
呼びたい場合は、以下のようなセマフォ開放シェルでも作っておいて、httpd が起動しなくなったら動かすってのがよさそう。ただし複数人で共有してるマシンでやるのは危険だが。
# cat /usr/local/apache2/bin/free_sem for i in `ipcs -s | grep daemon | awk '{print $2}'`; do ipcrm -s $i; done