毎月特定の日にcronjobを実行し、週末の場合は早く実行します。

毎月特定の日にcronjobを実行し、週末の場合は早く実行します。

毎月20日午前6時にスクリプトを実行するcronjobがあります。

0 6 20 * * /opt/example.sh

期待どおりに動作しますが、20日が土曜日または日曜日の場合は、スクリプトが早く実行されるように調整したいと思います。たとえば、

スクリプトは2021年2月20日に実行される予定ですが、今日は土曜日なので19日金曜日に実行されます。同様に、スクリプトは2022年2月20日に実行される予定ですが、この日は日曜日なので18日金曜日に実行されます。

cronjob自体を使用してこれを行うオプションやトリックを見つけることはできません。利用可能な代替単一値(たとえば、SUNの場合はcrontabの日曜日)を使用するいくつかのトリックを見つけたいと思います。

私の考えでは、これはスクリプト自体で実装する必要があると思います。

たとえば、18日に実行し、週末が来ない限り、20日までスクリプト内で実行(休止)を延期できます。これは私にエラーが発生しやすいようです。または、18日、19日、20日に実行をスケジュールし、スクリプトの日付を確認して自分の意図と一致することを確認するアイデアがあります。

cron自体を使用してこれを達成する方法はありますか?

ベストアンサー1

次のように実行18,19,20し、現在の日付を確認できます。

0 6 18,19,20 * * case $(LC_ALL=C date +\%a\%d) in (Sat*|Sun*);; (Fri18|Fri19|*20) /opt/example.sh; esac

土曜日でも日曜日でもない場合は20日が許可され、金曜日の場合は18日または19日が許可されます。

おすすめ記事