Führen Sie alle fünf Minuten einen Cron-Job zwischen zwei Zeitpunkten aus

16958
pythonic metaphor

Gibt es eine Möglichkeit, einen Job anzugeben, der alle fünf Minuten zwischen einer Startzeit und einer Endzeit an Arbeitstagen in einer Crontab ausgeführt wird?

Update Ich denke, es ist relevant, dass meine Start- und Endzeiten nicht rund sind. Daher reicht es nicht aus, 9-5 in der Stundenspalte anzugeben. Ich möchte 9: 30-17: 30.

16

2 Antworten auf die Frage

22
Ignacio Vazquez-Abrams

Sie müssen es stückweise tun:

30-59/5 9 * * * script.sh */5 10-16 * * * script.sh 0-30/5 17 * * * script.sh 
1
a CVn

Wenn die Antwort von Ignacio Vazquez-Abrams für Sie nicht wirklich zutrifft, zum Beispiel weil das Skript eine große Anzahl von Parametern benötigt oder die Aufrufkriterien nicht trivial (oder nicht zeitgebunden) sind, können Sie es mit einem einfachen Ansatz tun Wrapper-Skript, rufen Sie das Wrapper-Skript in regelmäßigen Abständen auf, und lassen Sie das aktuelle Skript die aktuelle Uhrzeit überprüfen und das Hauptskript aufrufen.

Zum Beispiel:

#/bin/bash  # Check to see if we should run the script now. HOUR=$(date +%H) MINUTE=$(date +%M) if test $HOUR -lt 9; then exit 0; fi if test $HOUR -eq 9 -a $MINUTE -lt 30; then exit 0; fi if test $HOUR -eq 17 -a $MINUTE -gt 30; then exit 0; fi if test $HOUR -gt 17; then exit 0; fi  # All checks passed; we should run the script now. exec script.sh ... long list of parameters ... 

Dies ermöglicht die Kodierung von Ausführungskriterien, die komplexer sind als die Syntax von cron, und dies mit relativ geringem Aufwand, wenn regelmäßig eine Shell und ein separates Skript aufgerufen werden.