Führen Sie den Cron-Job alle N Minuten plus Offset aus
251
*/20 * * * *
Stellt sicher, dass es alle 20 Minuten ausgeführt wird. Ich möchte alle 20 Minuten eine Aufgabe ausführen, beginnend um 5 Uhr nach der vollen Stunde. Ist dies mit Cron möglich? Wäre es:
Vielen Dank an die Babylonier, die beschlossen haben, dass unser Zeitsystem genau durch 1,2,3,4,5 und 6 geteilt werden sollte.
Arivero
3
Wenn es durch 2 und 3 teilbar ist, ist es auch durch 6 teilbar
Ziofil
Antworten:
514
Versuchen Sie Folgendes, um alle 20 Minuten ab 5 Uhr nach der vollen Stunde eine Aufgabe auszuführen:
5-59/20 * * * *
Erläuterung
Ein *in dem Minutenfeld ist das gleiche wie in 0-59/1dem 0-59der Bereich und 1der Schritt . Der Befehl wird in der ersten Minute im Bereich (0) ausgeführt, dann in allen aufeinanderfolgenden Minuten, die durch Schritt (1) vom ersten bis zum letzten (59) entfernt sind.
Aus diesem Grund */20 * * * *wird 0 Minuten, 20 Minuten danach und 40 Minuten danach ausgeführt - das entspricht allen 20 Minuten. Läuft */25 * * * *jedoch 0 Minuten, 25 Minuten danach und 50 Minuten danach - dies ist nicht dasselbe wie alle 25 Minuten. Aus diesem Grund ist es normalerweise wünschenswert, einen Schrittwert im Minutenfeld zu verwenden, der sich gleichmäßig in 60 teilt.
Um die Startzeit zu versetzen, geben Sie den Bereich explizit an und setzen Sie den ersten Wert auf den Betrag des Versatzes.
Beispiele
5-59/20 * * * * läuft 5 Minuten danach, 25 Minuten danach und 45 Minuten danach.
10-59/25 * * * * läuft 10 Minuten danach und 35 Minuten danach.
das funktioniert perfekt. Wie haben Sie das herausgefunden? Können Sie mich auf die Dokumente hinweisen? Vielen Dank.
AJP
12
Eine Vielzahl von Google-Suchanfragen führte mich zu dieser Antwort auf Serverfehler . Es hatte einen Fehler, der mich wirklich verwirrte, zumal andere Ergebnisse darauf hinwiesen, dass der Minutenmodulschritt gleich Null sein sollte . Ich habe endlich diese Handbuchseite gefunden, die mir die Antwort gab. Infolgedessen konnte ich die Antwort auf den Serverfehler kommentieren, die jetzt behoben wurde. Ich erinnere mich nicht an die tatsächlichen Suchbegriffe, mit denen ich die IBM-Seite gefunden habe.
Toxalot
3
Vielen Dank und sehr gute Arbeit @toxalot, ich wünschte, wir könnten Ihnen das "Tireless Investigator" -Abzeichen verleihen! : P
AJP
5
LOL. Ich musste alle 10 Minuten einen Job ausführen (versetzt um 5) und wollte wirklich keine durch Kommas getrennte Liste verwenden, daher war ich entschlossen, die Antwort zu finden.
Vielen Dank. Ich hatte dies getan und gehofft, dass es eine elegantere Lösung dafür geben könnte.
AJP
13
Manchmal ist die einfache Lösung besser, weil sie leicht zu lesen und zu verstehen ist. Ich mag es zu wissen, dass dies 5-59/20möglich ist, habe aber 5,25,45den Vorteil, dass sofort klar ist, was das bewirkt.
Thomasrutter
2
Nur wenn Ihr Schritt groß genug ist
Tebe
3
Dies ist ein viel besseres Beispiel. Es ist keine kognitive Belastung erforderlich, um zu verstehen, wann der Job beginnt.
Dylan Pierce
11
Du kannst es versuchen: */5 * * * * sleep N; your job
Ich sehe nichts Falsches daran - in der Tat ist dies sehr ähnlich zu der Art und Weise, wie der Cron-Job von certbot einen zufälligen Offset erzielt, der dazu beiträgt, die Serverlast im Gleichgewicht zu halten. Sicher verdient nicht all diese Abstimmungen
Billynoah
6
Ich fragte mich, wie ich eine zufällige Anzahl von Sekunden schlafen sollte. sleep `shuf -i 1-100 -n 1`macht den Trick.
Laizer
Verdammt, @Laizer, du hast mich wieder etwas lernen lassen! (Danke!)
Antworten:
Versuchen Sie Folgendes, um alle 20 Minuten ab 5 Uhr nach der vollen Stunde eine Aufgabe auszuführen:
Erläuterung
Ein
*
in dem Minutenfeld ist das gleiche wie in0-59/1
dem0-59
der Bereich und1
der Schritt . Der Befehl wird in der ersten Minute im Bereich (0) ausgeführt, dann in allen aufeinanderfolgenden Minuten, die durch Schritt (1) vom ersten bis zum letzten (59) entfernt sind.Aus diesem Grund
*/20 * * * *
wird 0 Minuten, 20 Minuten danach und 40 Minuten danach ausgeführt - das entspricht allen 20 Minuten. Läuft*/25 * * * *
jedoch 0 Minuten, 25 Minuten danach und 50 Minuten danach - dies ist nicht dasselbe wie alle 25 Minuten. Aus diesem Grund ist es normalerweise wünschenswert, einen Schrittwert im Minutenfeld zu verwenden, der sich gleichmäßig in 60 teilt.Um die Startzeit zu versetzen, geben Sie den Bereich explizit an und setzen Sie den ersten Wert auf den Betrag des Versatzes.
Beispiele
5-59/20 * * * *
läuft 5 Minuten danach, 25 Minuten danach und 45 Minuten danach.10-59/25 * * * *
läuft 10 Minuten danach und 35 Minuten danach.1-59/2 * * * *
wird jede ungerade Minute laufen.quelle
Sicher!
quelle
5-59/20
möglich ist, habe aber5,25,45
den Vorteil, dass sofort klar ist, was das bewirkt.Du kannst es versuchen:
*/5 * * * * sleep N; your job
quelle
sleep `shuf -i 1-100 -n 1`
macht den Trick.