同じスクリプトでエラーが発生した場合は、そのスクリプトを実行しているcronジョブをキャンセルします。

同じスクリプトでエラーが発生した場合は、そのスクリプトを実行しているcronジョブをキャンセルします。

5分ごとにcronが実行するスクリプトがあります。スクリプト自体でXYZエラーが発生した場合は、クローン操作を永久に停止し、スクリプトを終了するように追加したいと思います。現在のexit 1スクリプトに1つだけ追加すると、エラーが発生した場合、cronはスクリプトを再起動してループを続行します。

ベストアンサー1

残念ながら、クローン操作はこのユースケースをサポートしていません。解決策を提案する良い答えを受けました。ただし、これはsystemdなどの他のタスクスケジューラ/サービスマネージャではかなり簡単です。たとえば、root以外のユーザーの場合は、~/.config/systemd/userサービスとタイマーを含むディレクトリを作成します。

mytask.service

[Unit]
Description=My Task
After=multi-user.target

[Service]
Type=simple
ExecStopPost=/bin/sh -c 'if [ "$$EXIT_STATUS" = 1 ]; then systemctl --user stop mytask.timer; fi'
ExecStart=/bin/myscript.sh

[Install]
WantedBy=multi-user.target

mytask.timer

[Unit]
Description=Run script every 60 seconds

[Timer]
Persistent=true
OnBootSec=120
OnUnitActiveSec=60 # run every 60 seconds
Unit=mytask.service

[Install]
WantedBy=timers.target

最後に、サービスとタイマーを起動します。

systemctl --user enable mytask.service
systemctl --user enable mytask.timer
systemctl --user start mytask.timer
systemctl --user start mytask.service

スクリプトが失敗した場合(終了コード= 1)、サービスはタイマーを無効にし、スクリプトは再実行されません。

おすすめ記事