く、くやしい・・・foregroundで起動できるなんて・・・ビ

2009-12-15 追記

nginxのオプションが間違ってたので修正><

2009-12-16 追記

Apacheのrunファイルにpgrphackと補足文を追加。


daemontoolsのrunファイル。

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 を送るには

のパッチを当てればいいそうなんですが、失効しちゃってますね。。。

あざっす