Antwort
Ändern Sie Ihre Dienstag-Cron-Logik so, dass sie alle zwei Wochen seit der Epoche ausgeführt wird .
Zu wissen, dass eine Woche 604800 Sekunden hat (ohne Berücksichtigung von DST-Änderungen und Schaltsekunden, danke), und die Verwendung von GNU date:
0 6 * * Tue expr `date +\%s` / 604800 \% 2 >/dev/null || /scripts/fortnightly.sh
Beiseite
Kalenderarithmetik ist frustrierend.
Die Antwort von @xahtep ist großartig, aber wie @Doppelganger in den Kommentaren feststellte, wird sie an bestimmten Jahresgrenzen fehlschlagen. Nichts von date
Die "Woche des Jahres"-Spezifizierer des Dienstprogramms können hier helfen. Irgendein Dienstag Anfang Januar wird zwangsläufig die Wochenparität des letzten Dienstags im Vorjahr wiederholen:2016-01-05 (%V), 2018-01-02 (%U) und 2019-01-01 (%W) .
Pilcrows Antwort ist großartig. Dies führt jedoch dazu, dass das Skript fortnightly.sh gerade ausgeführt wird Woche (seit der Epoche). Wenn das Skript auf ungerade ausgeführt werden soll Wochen können Sie seine Antwort ein wenig anpassen:
0 6 * * Tue expr \( `date +\%s` / 604800 + 1 \) \% 2 > /dev/null || /scripts/fortnightly.sh
Wenn Sie die 1 in eine 0 ändern, wird sie auf gerade Wochen zurückgesetzt.
Wie wäre es damit, es hält es in crontab
auch wenn es in den ersten fünf Feldern nicht genau definiert ist:
0 6 * * Tue expr `date +\%W` \% 2 > /dev/null || /scripts/fortnightly.sh