ループで実行されるスクリプトがあります。 ./run_my_scriptを使用すると、コマンドラインからスクリプトを手動で簡単に開始できますが、スクリプトがハングアップして再起動する必要がある場合があります。そこで、ctrl-cを押して再起動します。次に、スクリプトを定期的に停止して再起動するだけのcronを作成します。だから私は私のcronに入れました:
00 * * * * pkill -f ./run_my_script && /bin/sleep 15 && ./run_my_script
これは機能しません。スクリプトを強制終了しますが、再起動しません。
00 * * * * pkill -f ./run_my_script
00 * * * * /bin/sleep 15 && ./run_my_script
これも機能しません。スクリプトは強制終了されますが、再起動はされません。だから私は試してみます:
00 * * * * pkill -f ./run_my_script
01 * * * * /bin/sleep 15 && ./run_my_script
そして、それはうまくいきます。問題は、1分間ではなく、強制終了と再起動の間に数秒を必要とすることです。どうすればできますか?
pkill
は、「1つ以上のプロセスが基準に一致した」場合にのみステータス0で終了します。つまり、./run_my_script
はまだ実行されていません。最初の&&
pkill -f ./run_my_script && /bin/sleep 15 && ./run_my_script
残りが実行されなくなります。
Andではなくセミコロンを使用するとうまくいくはずです
pkill -f ./run_my_script ; /bin/sleep 15 && ./run_my_script
だから私はこれを試してみましたが、うまくいきます:
00 * * * * /bin/sleep 45 && pkill -f ./run_my_script
01 * * * * ./run_my_script