デーモンを実行し続けるクローンタスク?

デーモンを実行し続けるクローンタスク?

次のようなクローン作業があるとしましょう。

*/15 * * * * /path/to/thedaemon

デーモン(Pythonデーモンfrom daemon import runner)はそれ自体で複数のインスタンスを許可しません。デーモンがすでに実行されている場合は起動を試み、次の結果が表示されます。

lockfile.LockTimeout: Timeout waiting to acquire lock for /tmp/thedaemon.pid

もちろん、cronジョブは関係ありません。定期的にコマンドを実行し続け、実行中でない場合は実行を開始できます。しかし、これはあまりエレガントではありません。

よりエレガントにcronジョブを設定する方法はありますか?始める前にデーモンが実行されていることをご存知ですか? 条件があれば速記でしょうか?

つまり、デーモンが実行されていることを確認するためにcronジョブをどのように設定しますか?

実行中なら何もしないでください。実行していない場合は始めてください。

答え1

Pythonデーモンをシェルスクリプトにラップできます。初めて起動するときは、プロセスがすでに実行されていることを確認してください。

pid=$(cat pid.file)
ps -ef | grep $pid | grep <command to start daemon>
if [[ $? -eq 0 ]]; then
    echo "daemon already running" & exit 1
else
    <command to start daemon> & \
             echo $! > pid.file
fi

関連情報