く、くやしい・・・foregroundで起動できるなんて・・・ビ
Apache
#!/bin/sh exec 2>&1 CONF=/usr/irori/etc/apache/httpd.conf DAEMON=/usr/local/app/apache/bin/httpd DAEMON_ARGS="-f $CONF -DNO_DETACH -DFOREGROUND" if [ ! -x "$DAEMON" ]; then echo "not executable: $DAEMON" exit 1 fi if ! $DAEMON $DAEMON_ARGS -t; then echo "syntax error: $CONF" exit 1 fi case $1 in check|test|configtest) exit ;; esac exec \ pgrphack \ env - PATH="/usr/local/bin:$PATH" \ envdir ./env \ $DAEMON $DAEMON_ARGS
MPM prefork の場合、Apache はプロセスグループにシグナルを送るようです。
で、httpdのPGIDは、svscanbootや、他のsvscanやデーモンプロセスととも同じなので、svc -t /service/apache などとすると、svscanbootも含めdaemontools配下のプロセスが全部死んでしまいます。
なので、runファイルをpgrphackを噛ますように変更しました。
MPM workerの場合は、ap_mpm_pod_killpgが呼ばれ、ap_mpm_pod_killpgは内部でkillpgするわけではないので大丈夫です。が、保険的にpgrphackを噛ますのは悪くはないと思います。
Nginx
#!/bin/sh exec 2>&1 CONF=/usr/irori/etc/nginx/nginx.conf DAEMON=/usr/local/app/nginx/sbin/nginx DAEMON_ARGS="-c $CONF -g 'error_log /var/log/nginx/default/default.err;' -g 'daemon off;'" if [ ! -x "$DAEMON" ]; then echo "not executable: $DAEMON" exit 1 fi if ! eval "$DAEMON $DAEMON_ARGS -t"; then echo "syntax error: $CONF" exit 1 fi case $1 in check|test|configtest) exit ;; esac eval " exec \ env - PATH="/usr/local/bin:$PATH" \ envdir ./env \ $DAEMON $DAEMON_ARGS "
Lighttpd
#!/bin/sh exec 2>&1 CONF=/usr/irori/etc/lighttpd/lighttpd.conf DAEMON=/usr/local/app/lighttpd/sbin/lighttpd DAEMON_ARGS="-f $CONF -D" if [ ! -x "$DAEMON" ]; then echo "not executable: $DAEMON" exit 1 fi if ! $DAEMON $DAEMON_ARGS -t; then echo "syntax error: $CONF" exit 1 fi case $1 in check|test|configtest) exit ;; esac exec \ env - PATH="/usr/local/bin:$PATH" \ envdir ./env \ $DAEMON $DAEMON_ARGS
てか、
冒頭の3つの変数が違うだけで、あとの部分は同じですね。。。
svcコマンドで SIGQUIT, SIGUSR1, SIGUSR2 を送るには
のパッチを当てればいいそうなんですが、失効しちゃってますね。。。