CronJob alle 25 Minuten

12

Ich möchte wissen, ob es eine einfachere Möglichkeit gibt, einen Job alle 25 Minuten auszuführen. Wenn Sie in Cronjob den Minutenparameter als * / 25 angeben, wird er nur in der 25. und 50. Minute jeder Stunde ausgeführt

Pappu
quelle

Antworten:

14

Der Befehl in crontab wird mit ausgeführt, /bin/shdamit Sie mithilfe der arithmetischen Erweiterung berechnen können, ob das aktuelle Minutenmodul 25 Null ist.

*/5 * * * * [ $(( $(date +%s) / 60 % 25 )) -eq 0 ] && your_command

cronFührt den gesamten Befehl alle 5 Minuten aus, aber nur, wenn die aktuelle Minute (in Minuten seit der Epoche) von Modulo 25 Null ist your_command.

Wie andere angemerkt haben, ist ein Tag nicht gleichmäßig durch 25 Minuten teilbar, sodass er nicht your_commandjeden Tag zur gleichen Zeit ausgeführt wird, sondern alle 25 Minuten.

camh
quelle
einfach genial ...
Tomas
Beachten Sie, dass Sie bei der Cron-Implementierung vom ISC mindestens die% -Zeichen mit Backslash umgehen müssen.
Stéphane Chazelas
7

Ihre beste Wette ist es, mit 20 Minuten oder 30 Minuten zu laufen.

Als nächstes sollten Sie alle 5 Minuten auslösen und dann eine interne Zählung oder einen internen Zeitstempel beibehalten und jeden 5. Auslöser ausführen, oder wenn seit dem letzten Durchlauf 25 Minuten vergangen sind.

Komplizierter wäre es, die korrekten Zeiten für einen Tag, beginnend um Mitternacht, zu ermitteln und den Fehler am Ende des Tages zu akzeptieren. Dies würde das Duplizieren des crontab-Eintrags auf die verschiedenen Stunden beinhalten.

Komplizierter als das wäre es, die Zeiten für einen ganzen Monat zu berechnen, was viele Kopien des crontab-Eintrags beinhalten würde, um die verschiedenen Kombinationen abzudecken.

Schließlich können Sie Ihren eigenen Always-On-Daemon implementieren und diesen für die Zeitplanung einsetzen.

Douglas Leeder
quelle
6

Ich habe keine direkte Erfahrung damit, aber fcron scheint das zu tun, was Sie wollen. Gemäß seiner Dokumentation können Sie Frequenzen angeben:

# Get our mails every 30 minutes 
@ 30 getmails -all 

# make some security tests every 48 hours of system up time, 
# force a mail to be sent to root even if there is no output 
@mailto(root),forcemail 2d /etc/security/msec/cron-sh/security.sh
che2cbs
quelle
Wo sehen Sie 25 Minuten hier?
Philomath
Verwenden Sie fcron und @ 25 commandsollte den Trick machen.
Caleb
Vielen Dank, Caleb. Ich hätte ein maßgeschneidertes Beispiel erstellen sollen, anstatt eines direkt aus der Dokumentation zu entnehmen.
Che2CBS
1

Lassen Sie mich kurz erklären, wo das Problem liegt. Die Eingabe von 25 in das Minutenfeld wird cronausgeführt, wenn die Minuten der aktuellen Zeit 25 entsprechen, dh einmal pro Stunde. Sie können eine Liste von Übereinstimmungen eingeben. Das Problem ist, dass 60 (Minuten einer Stunde) nicht durch 25 teilbar ist. Sie müssen daher mehrere Einträge basierend auf der Stunde hinzufügen. Das am wenigsten verbreitete Vielfache von 60 und 25 ist 300, also 5 * 60. Sie müssen also 5 Stunden durchlaufen, bis Sie wieder zu Ihrem ursprünglichen Start zurückkehren. beispielsweise:

0, 25, 50
15, 40
5, 30, 55
20, 45
10, 35
...

Aber auch hier ist 24 (Stunden pro Tag) nicht durch 5 teilbar, das am wenigsten verbreitete Vielfache von 5 & 24 ist einfach 5 * 24 = 120. & so weiter und so fort ...

Philomath
quelle
Vielleicht hätte die Antwort ein Kommentar zur ursprünglichen Frage sein sollen.
Philomath
1

Sie können mit dem letzten Änderungszeitpunkt einer Datei spielen

  • Erstellen Sie ein kleines Skript (zum Beispiel /usr/local/bin/age), das das Alter einer Datei ausgibt:

    #bin/sh
    echo $(( $( date +%s ) - $( stat -c %Z $1 ) ))
    

Ihre Crontab würde so aussehen (vorausgesetzt, 25 Minuten entsprechen 1500 Sekunden, wenn ich recht habe)

* * * * *  [ $(/usr/local/bin/fileage /var/tmp/your_command.offset) -gt 1500  ] && touch /var/tmp/your_command.offset && your_command

Beachten Sie, dass ich /var/tmpanstelle von verwende, /tmpda es laut FHS beim Herunterfahren / Starten des Systems nicht gelöscht werden soll.

SamK
quelle
-2

Ich denke das folgende sollte funktionieren 0 0/25 * * *?


quelle
Nach meinem Wissen wird es für jede Minute funktionieren.
Das würde stündlich einmal alle ... 25 Stunden ausgeführt? 0/25 ... nicht einmal sicher, was das macht, aber es ist nicht das, wonach das OP strebt.
Caleb