mehrere Zeitpläne für eine einzelne Aufgabe in einem K8S-Cronjob

mehrere Zeitpläne für eine einzelne Aufgabe in einem K8S-Cronjob

Warnung: k8s Greenhorn auf dieser Seite.

Ich muss eine Aufgabe ausführen, die in einem K8s-Cronjob eingerichtet wird. Sie muss alle 45 Minuten ausgeführt werden. Dies schedulefunktioniert nicht:

0/45 * * * *

X:00Weil es um und X:45dann X+1:00statt um ausgeführt würde X+1:30. Daher muss ich stattdessen möglicherweise mehrere Zeitplanregeln einrichten:

0,45 0/3 * * *
30   1/3 * * *
15   2/3 * * *

Ich frage mich, ob es möglich ist, mehrere Zeitpläne in einemeinzelCronJob-Definition oder ob ich mehrere CronJobs einrichten muss, sodass sich jeder CronJob um jede Zeile kümmert.

https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/cron-job-v1/

Aktualisieren: Ich habe gerade gelesen, dass es möglich ist, mehr als ein Manifest in eine einzelne YAML-Datei zu schreiben, sodass es mit 3 Manifesten funktionieren könnte … aber zu wissen, ob es mit einem einzelnen Manifest möglich ist, wäre großartig.

Antwort1

Versuchen Sie es mit */45, denn laut Handbuch bedeutet 0/45 alle anderen 45 von 0 …

Antwort2

Wenn die Crontab-Spezifikation unvollständig oder mehrdeutig erscheint, kann es die Dokumentation klären, herauszufinden, was sie wirklich tut. Alle Tests wurden unter Linux Mint 19.3 durchgeführt (in dem Crontab POSIX-kompatibel ist).

0/40 * * * * date >> Cron.log

crontab -e lässt nicht einmal die obige einzeilige Crontab-Anweisung zu. Die 0 ist eine bestimmte Minute. Es ergibt keinen Sinn, hier einen Skip einzubauen. Es wirft Folgendes aus:

"/tmp/crontab.4BQ7AN/crontab":0: bad minute
errors in crontab file, can't install.
Do you want to retry the same edit? (y/n) 

Kontrast zu

*/40 * * * * date >> Cron.log

Diese Version wird akzeptiert, da das * eine Liste von 0,1,2,...,59 darstellt. Der Skip reduziert dies auf 0 und 40.

Ich habe eine Crontab zusammengestellt, die die Auswirkungen von Bereichs- und Schrittkonstrukten demonstrieren soll.

$ crontab -l
#.. Crontab to illustrate ranges and steps.

#.. Every 20 mins from 0: 0, 20, 40.
*/20       13,14 * * * ~/Stamp 'Line  4:: */20'

#.. Every 20 minutes from 5: 5, 25, 45.
5-59/20    13,14 * * * ~/Stamp 'Line  7:: 5-59/20'

#.. Every 7 minutes from 9 to 35: 9, 16, 23, 30.
9-35/7     13,14 * * * ~/Stamp 'Line 10:: 9-35/7'

#.. Every 13 minutes from 33 to 59: 33, 46, 59.
33-59/13   13,14 * * * ~/Stamp 'Line 13:: 33-59/13'

#.. Once only.
14-14/2    13,14 * * * ~/Stamp 'Line 16:: 14-14/2'

#.. Once only.
11-59/999  13,14 * * * ~/Stamp 'Line 19:: 11-59/999'

~/Stamp ist ein Shell-Skript, das seine Ausführungszeit und den Minutenwert aus der Crontab-Datei protokolliert.

$ cat ~/Stamp
#! /bin/bash
#: Stamp: demonstrate crontab processing.

Log="./133000.cronLog"
printf >>"${Log}" '%(%T)T cron time spec %s\n' -1 "${1}"

Ich habe die Crontab um 13:35 installiert und sie hat diese Aufgaben protokolliert. Die Protokollierung wurde um 14:59 aufgrund der Stundenwerte 13,14 gestoppt und damit eine Stundengrenze überschritten. Ich glaube, die Spalten Stunden, Tag des Monats, Monat und Wochentag funktionieren identisch, aber ein 90-minütiger Test reicht mir.

paul@paul-RV415-RV515 ~ $ tail -F 133000.cronLog
tail: cannot open '133000.cronLog' for reading: No such file or directory
tail: '133000.cronLog' has appeared;  following new file
13:40:01 cron time spec Line  4:: */20
13:45:01 cron time spec Line  7:: 5-59/20
13:46:01 cron time spec Line 13:: 33-59/13
13:59:01 cron time spec Line 13:: 33-59/13
14:00:01 cron time spec Line  4:: */20
14:05:01 cron time spec Line  7:: 5-59/20
14:09:01 cron time spec Line 10:: 9-35/7
14:11:01 cron time spec Line 19:: 11-59/999
14:14:01 cron time spec Line 16:: 14-14/2
14:16:01 cron time spec Line 10:: 9-35/7
14:20:01 cron time spec Line  4:: */20
14:23:01 cron time spec Line 10:: 9-35/7
14:25:01 cron time spec Line  7:: 5-59/20
14:30:01 cron time spec Line 10:: 9-35/7
14:33:01 cron time spec Line 13:: 33-59/13
14:40:01 cron time spec Line  4:: */20
14:45:01 cron time spec Line  7:: 5-59/20
14:46:01 cron time spec Line 13:: 33-59/13
14:59:01 cron time spec Line 13:: 33-59/13
^C
paul@paul-RV415-RV515 ~ $ 

verwandte Informationen