Advertencia: K8s novato en este lado.
Necesito ejecutar una tarea que se configurará en un cronjob de k8s. Necesito que se ejecute cada 45 minutos. Tener esto en el schedule
no funciona:
0/45 * * * *
Porque se ejecutaría en X:00
, X:45
luego, X+1:00
en lugar de X+1:30
. Por lo tanto, es posible que deba configurar varias reglas de programación:
0,45 0/3 * * *
30 1/3 * * *
15 2/3 * * *
Me pregunto si es posible configurar múltiples horarios en unsolteroDefinición de CronJob o si tendré que configurar varios CronJobs para que cada CronJob se encargue de cada línea.
https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/cron-job-v1/
Actualizar: Acabo de leer que es posible tener más de un manifiesto escrito en un solo archivo yaml, por lo que podría funcionar con 3 manifiestos... pero saber si es posible con un solo manifiesto sería fantástico.
Respuesta1
Pruebe */45, porque según el manual 0/45 significa cada dos 45 de 0...
Respuesta2
Si la especificación crontab parece estar incompleta o ambigua, descubrir qué hace realmente puede aclarar la documentación. Todas las pruebas realizadas en Linux Mint 19.3 (en el que crontab es compatible con POSIX).
0/40 * * * * date >> Cron.log
crontab -e ni siquiera permitirá el crontab de una línea anterior. El 0 es un minuto concreto. No tiene sentido omitir eso. Lanza:
"/tmp/crontab.4BQ7AN/crontab":0: bad minute
errors in crontab file, can't install.
Do you want to retry the same edit? (y/n)
Contrastar con
*/40 * * * * date >> Cron.log
Acepta esta versión, porque el * representa una lista de 0,1,2,...,59. El salto reduce esto a 0 y 40.
Creé un crontab destinado a demostrar los efectos de las construcciones de rango y paso.
$ 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 es un script de shell que registra el tiempo de ejecución y el valor de los minutos del archivo crontab.
$ cat ~/Stamp
#! /bin/bash
#: Stamp: demonstrate crontab processing.
Log="./133000.cronLog"
printf >>"${Log}" '%(%T)T cron time spec %s\n' -1 "${1}"
Instalé el crontab a las 13:35 y registró estas tareas. Dejó de registrar a las 14:59 debido a los valores de las horas 13 y 14, por lo que superó el límite de una hora. Creo que las columnas de horas, día del mes, mes y día de la semana funcionan de manera idéntica, pero una prueba de 90 minutos es suficiente para mí.
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 ~ $