Aviso: k8s novato deste lado.
Preciso executar uma tarefa que será configurada em um cronjob k8s. Preciso que ele seja executado a cada 45 minutos. Ter isso no schedule
não funciona:
0/45 * * * *
Porque seria executado em X:00
, então X:45
em X+1:00
vez de X+1:30
. Portanto, talvez seja necessário configurar várias regras de agendamento:
0,45 0/3 * * *
30 1/3 * * *
15 2/3 * * *
Gostaria de saber se é possível configurar vários agendamentos em umsolteiroDefinição de CronJob ou se terei que configurar vários CronJobs para que cada CronJob cuide de cada linha.
https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/cron-job-v1/
Atualizar: Acabei de ler que é possível ter mais de um único manifesto escrito em um único arquivo yaml, então pode funcionar com 3 manifestos... mas saber se é possível com um único manifesto seria incrível.
Responder1
Tente */45, porque de acordo com o manual 0/45 significa todos os outros 45 de 0...
Responder2
Se a especificação do crontab parecer incompleta ou ambígua, descobrir o que ela realmente faz pode esclarecer a documentação. Todos os testes feitos no Linux Mint 19.3 (no qual o crontab é compatível com POSIX).
0/40 * * * * date >> Cron.log
crontab -e nem mesmo permitirá o crontab de uma linha acima. O 0 é um minuto específico. Não faz sentido pular isso. Ele joga:
"/tmp/crontab.4BQ7AN/crontab":0: bad minute
errors in crontab file, can't install.
Do you want to retry the same edit? (y/n)
Contraste com
*/40 * * * * date >> Cron.log
Aceita esta versão, pois o * representa uma lista de 0,1,2,...,59. O salto reduz isso para 0 e 40.
Elaborei um crontab com o objetivo de demonstrar os efeitos das construções de intervalo e etapa.
$ 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 é um script de shell que registra o tempo de execução e o valor dos minutos do arquivo crontab.
$ cat ~/Stamp
#! /bin/bash
#: Stamp: demonstrate crontab processing.
Log="./133000.cronLog"
printf >>"${Log}" '%(%T)T cron time spec %s\n' -1 "${1}"
Instalei o crontab às 13h35 e ele registrou essas tarefas. Ele parou de registrar às 14h59 por causa dos valores das horas 13,14, ultrapassando assim o limite de uma hora. Acredito que as colunas horas, dia do mês, mês e dia da semana funcionam de forma idêntica, mas um teste de 90 minutos é suficiente para mim.
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 ~ $