2017-09-01 1 views

Antwort

0

Cron fügt die Stunden und Minuten für das Intervall nicht hinzu. */53 */1 * * * läuft um 1:53, 2:53, 3:53 usw.

Sie müssten separate Zeitpläne erstellen. Für ein 53-Minuten-Intervall, würde sich der Satz wie folgt:

0 0 * * * /myscrop.sh 
53 0 * * * /myscrop.sh 
46 1 * * * /myscrop.sh 
39 2 * * * /myscrop.sh 
32 3 * * * /myscrop.sh 
25 4 * * * /myscrop.sh 
18 5 * * * /myscrop.sh 
11 6 * * * /myscrop.sh 
4 7 * * * /myscrop.sh 
57 7 * * * /myscrop.sh 
50 8 * * * /myscrop.sh 
43 9 * * * /myscrop.sh 
36 10 * * * /myscrop.sh 
29 11 * * * /myscrop.sh 
22 12 * * * /myscrop.sh 
15 13 * * * /myscrop.sh 
8 14 * * * /myscrop.sh 
1 15 * * * /myscrop.sh 
54 15 * * * /myscrop.sh 
47 16 * * * /myscrop.sh 
40 17 * * * /myscrop.sh 
33 18 * * * /myscrop.sh 
26 19 * * * /myscrop.sh 
19 20 * * * /myscrop.sh 
12 21 * * * /myscrop.sh 
5 22 * * * /myscrop.sh 
58 22 * * * /myscrop.sh 
51 23 * * * /myscrop.sh 

Und beachten Sie, dass das Intervall zu Beginn des Tages immer neu gestartet.

1

Mit "regulären" crontab Einträge ist dies ziemlich schwierig ohne eine große Anzahl von ihnen.

Da Sie Ihr Job wollen jeden 1h passieren: 53m (113m), können Sie nur in der Lage sein, jede Minute, aber mit einem geeigneten Schrittwert zu laufen, so etwas wie:

*/113 * * * command-to-run 

obwohl ich noch nie testete dies mit großen Sprungwerten wie diesem.

Wenn das funktioniert, ist es wahrscheinlich die einfachste Lösung.

Wenn Sie in einer Umgebung arbeiten, in der nicht funktioniert Arbeit, können Sie den Trick des tatsächlichen Ausführen des Skripts jede Minute, aber mit der Entscheidung, ob es die tatsächliche "Nutzlast" der Aufgabe.

Verwenden Sie dazu eine Statusdatei, um die letzte Ausführung der Nutzlast aufzuzeichnen. Obwohl das Skript selbst sehr häufig ausgeführt wird, wird die Payload nur ausgeführt, wenn seit dem letzten Mal genug Zeit vergangen ist.

Zum Beispiel das folgende Skript läuft nur die Nutzlast (die endgültige echo) alle sieben Sekunden, unabhängig davon, wie oft das Skript aufgerufen wird:

#!/bin/bash 

# Configuration items. 

stateFile=/tmp/lastPayload # File holding time of last payload run. 
minGap=7     # How often payload should run (seconds). 

# Get last payload time (checks for non-valid data). 

((lastTime = 0)) 
[[ -f ${stateFile} ]] && lastTime="$(cat ${stateFile})" 
[[ "${lastTime}" =~ [1-9][0-9]* ]] || ((lastTime = 0)) 

# Exit if not enough time since last payload run. 

thisTime=$(date +%s) 
((timeGap = thisTime - lastTime)) 
[[ ${timeGap} -lt ${minGap} ]] && exit 

# Update last payload run time and execute payload. 

echo ${thisTime} >${stateFile} 
echo "[${lastTime}] [${thisTime}] [${timeGap}]" 

Wenn das Skript test_periodic.sh aufgerufen wird, können Sie es testen mit:

while true ; do ./test_periodic.sh ; sleep 1 ; done 

Dies wird es in jeder Sekunde laufen, aber Sie werden die Nutzlast bemerken nur alle sieben Sekunden (außer dem ersten Mal) durchgeführt wird, wie erwartet:

[0] [1504041523] [1504041523] 
[1504041523] [1504041530] [7] 
[1504041530] [1504041537] [7] 
[1504041537] [1504041544] [7] 

Für 1h: 53m, minGap auf 6780 (113 Minuten, in Sekunden) setzen und cron das Skript jede Minute ausführen lassen.

Verwandte Themen