はじめに
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/)