Ich muss einen Weg finden, einen Job so zu gestalten, dass er jeden zweiten Mittwoch im Monat läuft. Ist das möglich?
Ich muss einen Weg finden, einen Job so zu gestalten, dass er jeden zweiten Mittwoch im Monat läuft. Ist das möglich?
Antworten:
Meine Manpage für Crontab (die ich leider nicht online zu finden scheine) enthält das folgende Beispiel:
# Run on every second Saturday of the month
0 4 8-14 * * test $(date +\%u) -eq 6 && echo "2nd Saturday"
Anpassung an Ihre Zwecke ...
0 4 8-14 * * test $(date +\%u) -eq 3 && job.sh
*
der Befehl ausgeführt wird , wenn sowohl der Wochentag als auch der Wochentag eingeschränkt sind (dh nicht ), wenn einer der beiden übereinstimmt .
date +\%u
Sie können das Ausführen eines externen Skripts vermeiden, indem Sie eine Kombination aus dem Wochentagstrick und dem Wochentag verwenden:
# Run on every second Wednesday of the month
0 4 8-14 * Wed job.sh
Dadurch wird auch vermieden, dass ein anderes externes Programm ausgeführt wird. Die 8-14 wählt alle Tage aus, die der zweiten Woche des Monats entsprechen. Dann filtert es gerade an diesem Mittwoch heraus.
Es ist nicht möglich, cron alleine zu verwenden, aber Sie können einmal pro Woche ein Skript aufrufen, das den Test ausführt:
Führen Sie in crontab jeden Mittwoch um 12.00 Uhr second_wed.sh aus:
0 12 * * 3 /home/you/bin/second_wed.sh
In second_wed.sh:
#!/usr/bin/env bash
day_of_month=`date +"%
if [ $day_of_month -gt 7 -a $day_of_month -lt 15 ]; then
# Call your program here instead of 'ls'…
ls
fi
Basierend auf dieser Antwort können Sie Folgendes tun:
00 12 * * Wed expr `date +\%d` \> 7 \& `date +\%d` \< 15 >/dev/null && runJob.sh
Für CentOS 7-Server scheint dies die Syntax zu sein, die für mich funktioniert. Bitte beachten Sie die Leerzeichen um [
und ]
. Es dauerte eine Weile, bis ich es herausgefunden hatte.
Dadurch wird die test.sh
Datei am zweiten Mittwoch des Monats um 13:07 / 13:07 Uhr ausgeführt. (0 = Sonntag, 1 = Montag, 2 = Dienstag, 3 = Mittwoch usw.)
07 13 8-14 * * [ `date +\%u` = 3 ] && /root/scripts/test.sh
Feuer um 10.15 Uhr am dritten Freitag eines jeden Monats: 0 15 10 ? * 6#3
Quelle: https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm