Cronジョブを45日ごとに実行することは可能ですか?(約1か月半)

Cronジョブを45日ごとに実行することは可能ですか?(約1か月半)

crontab のドキュメントを読んだ後、次のスケジュールを記す方法が思いつきません: スクリプトを 45 日ごとに 1 回実行します。

誰かエレガントな解決策を知っていますか? ありがとうございます。

答え1

45 日間の期間はグレゴリオ暦の週、月、または年にうまく分割されないため、スクリプトが実行される日付を制限し、必要なすべての日にスクリプトを実行する方法はありません。

そのため、コマンドを毎日実行し、45 日のうち 44 日は何もせずにコマンド自体を返す必要があります。

たとえば、スクリプトを 03:17 に実行する場合、コマンドは次のようになります。

17 3 * * * /usr/local/bin/your-script

スクリプト内では次のように実行できます。

#!/bin/bash
if [[ $[($(date +%s)/86400)%45] != 0 ]]
then
    return
fi

real things happen here

この!= 0部分は、最初に実行する日に応じて異なる番号を使用できます。また、その追加ロジックをスクリプトではなく crontab に配置することもできますが、個人的にはスクリプトで実行する方が読みやすいと思います。

タイムゾーンで DST が使用されている場合は、時計の調整時にスケジュールが 1 日ずれるのを避けるために、上記の設定を微調整する必要がある場合があります。正確な詳細は、スクリプトを実行するために選択したタイムゾーンと時刻によって異なります。

答え2

cronjobのエントリを2つ使用する必要がある場合があります。1つ目は1か月用、2つ目は45日間用です。

毎月以下のcronを使用する

0 0 1 * *  your_script

そして45日後のこのcronエントリ

10 13 * * *  test $(( `date +\%s`/24/60/60\%45 )) = 41 && your_script

45日間のcronスケジュールについては、以下のリンクから参照しました。

https://stackoverflow.com/questions/8699075/how-to-set-cron-job-for-every-45-days

関連情報