Ich möchte jeden ersten Montag im Monat um 8.30 Uhr einen Job von cron ausführen. Die Cron Wikipedia Seite sagt
Während der Job normalerweise ausgeführt wird, wenn die Zeit- / Datumsangaben alle mit der aktuellen Uhrzeit und dem aktuellen Datum übereinstimmen, gibt es eine Ausnahme: Wenn sowohl "Tag des Monats" als auch "Wochentag" eingeschränkt sind (nicht "*"), dann auch nicht Das Feld "Tag des Monats" (3) oder das Feld "Wochentag" (5) muss mit dem aktuellen Tag übereinstimmen.
(meine Betonung)
Bedeutet das, dass ich den ersten Montag des Monats nicht machen kann, ich kann nur den ersten (oder was auch immer) Tag des Monats machen? Ich kann mir keinen Ausweg vorstellen.
Antworten:
Sie können die Bedingung in den aktuellen Befehl crontab einfügen:
Wenn diese Bedingung an einem der ersten sieben Tage eines Monats erfüllt ist, haben Sie den ersten Montag. Beachten Sie, dass in der Crontab die Prozent-Syntax jedoch maskiert werden muss:
Ersetzen Sie den
echo
Befehl durch den tatsächlichen Befehl, den Sie ausführen möchten. Ich habe auch einen ähnlichen Ansatz gefunden .quelle
[ "$(date '+%a')" = "Mon" ] && echo "It's Monday"
genauso wie[ $(date '+%a') = "Mon" ] && echo "It's Monday"
in der Crontab. Bei diesem Test scheint es jedoch zu scheitern. Ich kann auch keine nützlichen Rückmeldungen von cron bekommen: Ich versuche[ "$(date '+%a')" = "Tue" ] >> /home/deploy/cron.log 2>&1
, hiermit Fehlerausgaben in einem Protokoll festzuhalten, aber das funktioniert auch nicht: /date
Ausgabe korrekt ist? Lassen Sie beispielsweise einencron
Befehl ausführen, der dies in eine Datei ausgibt:date '+%a' > ~/datetest 2>&1
- Überprüfen Sie dann, ob die richtige Zeichenfolge zum Vergleich gefunden wurde.+%a
erforderlich entkommen , wenn es in der crontab war, dh die Linie notwendig , um dies zu sein:[ "$(date '+\%a')" = "Mon" ] && echo "It's Monday"
. Wenn Sie Ihre Antwort damit aktualisieren könnten, wäre es für zukünftige Leser hilfreich :) Nochmals vielen Dank - MaxIch habe einen Computer mit einem Gebietsschema für Spanisch, daher funktioniert dieser Ansatz bei mir nicht, weil mein Tag auf Mittag wechselt
Andere Sprachen würden ebenfalls scheitern. Daher habe ich die akzeptierte Antwort leicht abgewandelt, um die Sprachbarriere zu überwinden:
quelle
Ich finde es einfacher, wenn es nicht nötig ist, mit Tageszahlen umzugehen.
Führen Sie den ersten Montag im Monat aus:
dh wenn der Monat vor 1 Woche nicht mit dem aktuellen Monat übereinstimmt, sind wir am 1. Tag 1 (= Montag) des Monats.
Ähnliches gilt für den dritten Freitag
dh wenn der Monat vor 3 Wochen vom aktuellen Monat abweicht, sind wir am 3. Tag 6 (= Freitag) des Monats
quelle
Ich habe einen Auftrag für den 4. Montag eines jeden Monats um 16:00 Uhr wie folgt eingeplant:
quelle
Soweit ich weiß, ist es NICHT möglich, nur crontab zu verwenden. Sie können jedoch eine Wrapper-Funktion verwenden, um den richtigen Tag aus einem Contab-Eintrag für die ersten sieben Tage im Monat auszuwählen. siehe dies vom Eintrag.
Das Wrapper-Skript wäre
und Sie müssten es mit dem Eintrag crontab ausführen (vorausgesetzt, es heißt wrapper.sh und ist global verfügbar)
quelle
Unter Solaris 10 musste ich die Bedingung wie folgt formatieren:
quelle
Sie können versuchen, Cronjob für die ersten sieben Tage des Monats auszuführen und es nur am Montag ausführen zu lassen.
Oben sollte für Sie arbeiten.
quelle
Ich empfehle zu verwenden
anstatt
um Probleme mit dem Gebietsschema zu vermeiden.
quelle
Ich habe eine allgemeine Lösung für diese Art von Problemen gefunden. Sie funktioniert für den ersten, zweiten, dritten ... letzten Wochentag des Monats.
Du kannst es so benutzen:
Das Skript prüft, ob der Wochentag und der gewünschte Wochentag übereinstimmen. Wenn beide übereinstimmen, wird 0 zurückgegeben, andernfalls 1.
Überprüfen Sie den Code hier. https://github.com/xr09/cron-last-sunday
quelle
Ich glaube, das löst das Problem eleganter:
quelle
Da ich meine cron-Anweisungen mit php und js interpretiere, kann ich bash nicht verwenden. Schließlich fand ich , dass es ist in der Tat möglich , mit nur cron:
Hoffe das hilft jemand anderem. Trotzdem wünsche ich Ihnen allen einen schönen Tag. :-)
quelle
Dies funktioniert jeden Montag im Monat.
quelle