答え
火曜日の cron ロジックを変更して、エポックから 隔週で実行するようにします .
1 週間が 604800 秒であることを知り (DST の変更と閏秒を無視します、ありがとうございます)、GNU 日付を使用します:
0 6 * * Tue expr `date +\%s` / 604800 \% 2 >/dev/null || /scripts/fortnightly.sh
さておき
カレンダーの計算はイライラします。
@xahtepの答えは素晴らしいですが、@Doppelgangerがコメントで指摘したように、特定の年の境界で失敗します。 date
のどれも utility の「年の週」指定子がここで役立ちます。 1 月上旬のある火曜日は、必然的に前年の最終火曜日の週パリティを繰り返します:2016-01-05 (%V)、2018-01-02 (%U)、および 2019-01-01 (%W) .
ピルクロウの答えは素晴らしいです。ただし、fortnightly.sh スクリプトは 偶数 ごとに実行されます。 週 (エポックから)。スクリプトを odd で実行する必要がある場合 数週間、彼の答えを少し調整できます:
0 6 * * Tue expr \( `date +\%s` / 604800 + 1 \) \% 2 > /dev/null || /scripts/fortnightly.sh
1 を 0 に変更すると、偶数週に戻ります。
これはどうですか、crontab
に保持されます 最初の 5 つのフィールドで正確に定義されていなくても:
0 6 * * Tue expr `date +\%W` \% 2 > /dev/null || /scripts/fortnightly.sh