Предупреждение: k8s новичок на этой стороне.
Мне нужно запустить задачу, которая будет установлена в cronjob k8s. Мне нужно, чтобы она запускалась каждые 45 минут. Наличие этого в schedule
не работает:
0/45 * * * *
Потому что он будет работать в X:00
, затем X:45
затем X+1:00
вместо X+1:30
. Поэтому мне может потребоваться настроить несколько правил расписания вместо этого:
0,45 0/3 * * *
30 1/3 * * *
15 2/3 * * *
Мне интересно, возможно ли настроить несколько расписаний в одномодинокийОпределение CronJob или мне придется настроить несколько CronJob, чтобы каждый CronJob заботился о каждой строке.
https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/cron-job-v1/
Обновлять: Я только что прочитал, что в одном файле YAML можно записать более одного манифеста, поэтому это может работать с тремя манифестами... но было бы здорово узнать, возможно ли это с одним манифестом.
решение1
Попробуйте */45, так как согласно руководству 0/45 означает каждые 45 из 0...
решение2
Если спецификация crontab кажется неполной или двусмысленной, выяснение того, что она на самом деле делает, может прояснить документацию. Все тесты проводились на Linux Mint 19.3 (в котором crontab соответствует POSIX).
0/40 * * * * date >> Cron.log
crontab -e даже не разрешит вышеприведенный однострочный crontab. 0 — это конкретная минута. Нет смысла ставить пропуск на это. Он выдает:
"/tmp/crontab.4BQ7AN/crontab":0: bad minute
errors in crontab file, can't install.
Do you want to retry the same edit? (y/n)
Контраст с
*/40 * * * * date >> Cron.log
Он принимает эту версию, поскольку * представляет собой список 0, 1, 2, ..., 59. Пропуск сокращает его до 0 и 40.
Я составил файл crontab, призванный продемонстрировать эффекты конструкций диапазона и шага.
$ 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 — это скрипт оболочки, который регистрирует время своего выполнения и значение минут из файла crontab.
$ cat ~/Stamp
#! /bin/bash
#: Stamp: demonstrate crontab processing.
Log="./133000.cronLog"
printf >>"${Log}" '%(%T)T cron time spec %s\n' -1 "${1}"
Я установил crontab в 13:35, и он записал эти задачи. Он перестал записывать в 14:59 из-за значений часов 13,14, тем самым выйдя за пределы часовой границы. Я считаю, что столбцы часов, дня месяца, месяца и дня недели работают одинаково, но мне достаточно 90-минутного теста.
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 ~ $