私は書いてい/etc/init.d/mydaemon
ます:
# ...
source functions # LSB compliant
EXEC=/usr/local/bin/mydaemon
PROG=mydaemon
function start() {
daemon --pidfile=/var/run/mydeamon.pid ${EXEC}
}
function stop() {
killproc ${PROG}
}
# ...
私の/usr/local/bin/mydaemon
:
#!/bin/bash
trap "trap TERM ; kill 0" TERM
binary with some args
私の知る限り、これは次の理由で機能するはずです。
daemon
mydaemon
の PID を記録します/var/run/mydaemon.pid
killproc
その PID を読み取り、その PID に送信SIGTERM
します。mydaemon
このシグナルをトラップし、トラップを無効にして、 のプロセスを含むSIGTERM
全体に送信します。PGRP
binary with some args
ただし、これは機能しません。サービスを停止した後、mydaemon
終了しますが、binary
まだ実行中です。
何が欠けていますか?デーモンとそのすべての子を停止するためのベストプラクティスは何ですか?
ところで:
/usr/local/bin/mydaemon が次の場合:
#!/bin/bash
binary with some args &
echo $! $$ > /var/run/mydaemon.pid
wait
適切に動作しますが、これは私には堅牢性が低いように思われ、これが適切でない場合があります (バイナリ呼び出しがそれほど単純でない場合、または独自の子がある場合など)。