web-dev-qa-db-ja.com

cronをpkill -fに設定

ループで実行されるスクリプトがあります。 ./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分間ではなく、強制終了と再起動の間に数秒を必要とすることです。どうすればできますか?

3
WesZ

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
5
Torin

だから私はこれを試してみましたが、うまくいきます:

00 * * * * /bin/sleep 45 && pkill -f ./run_my_script
01 * * * * ./run_my_script
2
WesZ