ファイルが存在する場合にのみcrontabジョブを実行する方法は?

ファイルが存在する場合にのみcrontabジョブを実行する方法は?

crontab onelinerにファイルがあることを確認し、ファイルがある場合にのみスクリプトを実行できますか?

擬似コード:

* * * * * <if /tmp/signal.txt exists> run /opt/myscript.sh

ベストアンサー1

技術的には、ファイルの存在に応じてcronジョブの実行を避けることはできませんが、ファイルの存在をジョブテストし、そのテスト結果に基づいて追加のアクションを実行することができます。

Normalを使用して存在をテストし、テストに成功したらスクリプトを実行します。

* * * * *       if [ -e /tmp/signal.txt ]; then /opt/myscript.sh; fi

または

* * * * *       if test -e /tmp/signal.txt; then /opt/myscript.sh; fi

または、段落構文を使用します。そうすれば仕事が起こるだろう。失敗するファイルが存在しない場合(これによりcronデーモンからEメールが送信される可能性があります):

* * * * *       [ -e /tmp/signal.txt ] && /opt/myscript.sh

または

* * * * *       test -e /tmp/signal.txt && /opt/myscript.sh

さらに、そのファイルがディレクトリ、名前付きパイプ、または他の種類のファイルではなく通常のファイルであることを確認するには、-ftestの代わりにtestを使用できます。-e/tmp/signal.txt

クローンスケジュールをきれいに保つには、テストをスクリプト自体に移動することをお勧めします。これにより、次のスケジュールを持つことができます。

* * * * *       /opt/myscript.sh

...そしてスクリプトの先頭にテストが含まれ、テストが失敗すると終了します。

if [ ! -e /tmp/signal.txt ]; then
    exit
fi

おすすめ記事