はじめに
readproctitle service errors: ...が出て、そのプロセスをkillしたら、defunctが発生して何度もrunのexecを実行する状態になりました。
ここでは発生する原因は追及しません.
initctl restart svscan
で直りました。
当然といえば当然ですが。
/command/svscanboot/の子プロセス\_svscan /serviceと並んで、readproctitle service errors: ...が出ますが、これは出たままでも動作するようです。
環境
CentOS 6.9
daemontools 0.76
実行ファイル
/tmp/test_proc/run
起動
cd /service ; ln -s /tmp/test_proc test_proc
消したあとにやったこと
test_procの子プロセスを削除すると、本来ならrunに書かれたexecが起動するはずですが、defunctになってしまいます。
\_ supervise test_proc
\_ [run] <defunct>
svc -dx test_procで再起動しても、一瞬起動してすぐにdefunctになります。その後起動とdefunctを繰り返します。
# svstat test_proc
test_proc: up (pid 15324) 1 seconds
# svstat test_proc
test_proc: up (pid 15333) 1 seconds
# svstat test_proc
test_proc: up (pid 15338) 1 seconds
# svstat test_proc
test_proc: up (pid 15344) 1 seconds
こうなると、/tmp/test_proc/superviseを削除したり、/service/test_procをアンリンクしたりしてもdefunctが発生してしまいました。
ただし、/tmp/test_proce/run &は正常に起動します。
結局initctl restart svscanで元通りになりました。
参考資料
daemontools HOW-TO (α版)(www.emaillab.org)
daemontools のページ(www.unixuser.org/~euske/)
daemontools で defunct な multilog が生まれる現象を再現しようと試みたメモ(blog.livedoor.jp/sonots/)