
Ich muss alle 15 Minuten einen Cron-Job ausführen, beginnend um 06:05 Uhr und endend um 22:05 Uhr.
0 5/15 6-22 * * *
Die folgende Syntax umfasst 22:35 und 22:50.
Irgendeine Idee, wie man das erreichen kann? Ist das mit einer Zeile möglich oder muss ich mehrere konfigurieren?
Antwort1
Es ist mit einem Croline möglich, aber nur mit Tricks
SHELL=/bin/bash
5-50/15 6-22 * * * [[ '2220 2235 2250' =~ "$(date +\%H\%M)" ]] || /path/to/script
Oder mit sh
(und bash)
SHELL=/bin/sh
5-50/15 6-22 * * * case "$(date +\%H\%M)" in 2220|2235|2250) ;; *) /path/to/script;;esac
Beachten Sie die Backslash-Escapes für Prozentzeichen (%), die für Crontabs benötigt werden.
Antwort2
*/15 6-22 * * * /path/to/script
ODER
5,20,35,50 6-22 * * * /path/to/script
Ein Feld kann ein Sternchen (*) sein, das immer für „Vorname-Nachname“ steht. Zahlenbereiche sind zulässig. Bereiche bestehen aus zwei Zahlen, die durch einen Bindestrich getrennt sind. Der angegebene Bereich ist inklusiv. Beispielsweise gibt 8-11 für einen „Stunden“-Eintrag die Ausführung zu den Stunden 8, 9, 10 und 11 an.
Listen sind erlaubt. Eine Liste ist eine Reihe von Zahlen (oder Bereichen), die durch Kommas getrennt sind. Beispiele: „1,2,5,9“, „0-4,8-12“.
Schrittwerte können in Verbindung mit Bereichen verwendet werden. Wenn auf einen Bereich ein "" folgt, wird angegeben, dass der Zahlenwert durch den Bereich übersprungen werden soll. Beispielsweise kann "0-23/2" im Stundenfeld verwendet werden, um die Befehlsausführung alle zwei Stunden anzugeben (die Alternative im V7-Standard ist "0,2,4,6,8,10,12,14,16,18,20,22"). Schritte sind auch nach einem Asterisk zulässig. Wenn Sie also "alle zwei Stunden" sagen möchten, verwenden Sie einfach "*/2".
Namen können auch für die Felder „Monat“ und „Wochentag“ verwendet werden. Verwenden Sie die ersten drei Buchstaben des jeweiligen Tages oder Monats (Groß-/Kleinschreibung spielt keine Rolle). Bereiche oder Listen von Namen sind nicht zulässig.
Das "sechste" Feld (der Rest der Zeile) gibt den auszuführenden Befehl an. Der gesamte Befehlsteil der Zeile, bis zu einem Zeilenumbruch- oder %-Zeichen, wird von /bin/sh oder von der Shell ausgeführt, die in der Variable SHELL der Cronfile angegeben ist. Prozentzeichen (%) im Befehl werden, sofern sie nicht mit einem Backslash () maskiert sind, in Zeilenumbruchzeichen geändert und alle Daten nach dem ersten % werden als Standardeingabe an den Befehl gesendet.
Hinweis: Der Tag der Ausführung eines Befehls kann durch zwei Felder angegeben werden - Tag des Monats und Wochentag. Wenn beide Felder eingeschränkt sind (d. h. nicht mit * markiert sind), wird der Befehl ausgeführt, wenn eines der Felder mit der aktuellen Zeit übereinstimmt. Beispielsweise würde „30 4 1,15 * 5“ dazu führen, dass ein Befehl am 1. und 15. jedes Monats sowie jeden Freitag um 4:30 Uhr ausgeführt wird.
Antwort3
Ich persönlich würde es in zwei Zeilen aufteilen:
5-50/15 6-21 * * * /path/to/script
5 22 * * * /path/to/script
Die erste Linie soll den Zeitraum von 06:05 bis 21:50 Uhr abdecken, die zweite für einen zusätzlichen Lauf um 22:05 Uhr.
Wenn Sie wirklich nur eine Zeile möchten, würde ich die Ungenauigkeitsprüfung durchführen, um einer möglicherweise ungenauen Job-Startzeit Rechnung zu tragen:
5-50/15 6-22 * * * [[ $(date +"\%-H\%M") -le 2210 ]] && /path/to/script
Antwort4
Etwas verspätet, aber der Vollständigkeit halber können Sie bei CronBuddy.com eine Liste der zukünftigen Laufzeiten für jeden Cron-Ausdruck abrufen – eine einfache Möglichkeit, nachzuschauen, was passieren wird.