次のようなクローン作業があるとしましょう。
*/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