Ejecute el trabajo Cron cada N minutos más desplazamiento

251

*/20 * * * *

Asegura que se ejecuta cada 20 minutos, me gustaría ejecutar una tarea cada 20 minutos, comenzando a las 5 pasadas las horas, ¿es esto posible con Cron? Podría ser:

5/20 * * * * ?

AJP
fuente
10
Gracias los babilonios, quienes decidieron que nuestro sistema de tiempo debería dividirse exactamente entre 1,2,3,4,5 y 6.
arivero
3
si es divisible por 2 y 3 también es divisible por 6
Ziofil

Respuestas:

514

Para ejecutar una tarea cada 20 minutos a partir de las 5 pasadas la hora, intente esto:

 5-59/20 * * * *

Explicación

Un *campo en el minuto es el mismo que 0-59/1donde 0-59está el rango y 1es el paso . El comando se ejecutará en el primer minuto en el rango (0), luego en todos los minutos sucesivos que estén distantes del primero por el paso (1), hasta el último (59).

Es por eso que */20 * * * *se ejecutará a los 0 minutos, 20 minutos después y 40 minutos después, que es lo mismo que cada 20 minutos. Sin embargo, */25 * * * *se ejecutará a los 0 minutos, 25 minutos después y 50 minutos después, lo que no es lo mismo que cada 25 minutos. Es por eso que generalmente es deseable usar un valor de paso en el campo de minutos que se divide de manera uniforme en 60.

Entonces, para compensar el tiempo de inicio, especifique el rango explícitamente y establezca el primer valor en la cantidad del desplazamiento.

Ejemplos

5-59/20 * * * * funcionará 5 minutos después, 25 minutos después y 45 minutos después.

10-59/25 * * * * funcionará a los 10 minutos y 35 minutos después.

1-59/2 * * * * correrá cada minuto impar.

toxalot
fuente
3
Eso funciona perfectamente. ¿Cómo lo descubriste? ¿Puedes señalarme hacia los documentos? Gracias.
AJP
12
Una variedad de búsquedas en Google me llevó a esta respuesta de error del servidor . Tuve un error que realmente me confundió, especialmente porque otros resultados sugirieron que el paso del módulo de minutos debería ser igual a cero . Finalmente encontré esta página del manual que me dio la respuesta. Como resultado, pude comentar sobre la respuesta de Falla del servidor que ahora se ha solucionado. No recuerdo los términos de búsqueda reales que utilicé para encontrar la página de IBM.
toxalot
3
Gracias y muy buen trabajo @toxalot, ¡desearía poder otorgarle la insignia "Investigador incansable"! : P
AJP
55
Jajaja Necesitaba ejecutar un trabajo cada 10 minutos (compensado por 5) y realmente no quería usar una lista delimitada por comas, así que estaba decidido a encontrar la respuesta.
toxalot
2
Desafortunadamente, a CPanel no parece gustarle esto :(
Robert salió el
53

¡Por supuesto!

5,25,45 * * * * /your/cron
fedorqui 'así que deja de dañar'
fuente
2
Gracias. Terminé haciendo esto, esperaba que pudiera haber una solución más elegante.
AJP
13
A veces la solución simple es mejor porque es fácil de leer y entender. Me gusta saber que 5-59/20es posible, pero 5,25,45tiene la ventaja de que de inmediato queda muy claro lo que hace.
thomasrutter
2
solo si tu paso es lo suficientemente grande
Tebe
3
Este es un ejemplo mucho mejor. Se necesita 0 carga cognitiva para comprender cuándo comienza el trabajo.
Dylan Pierce
11

Puedes probar: */5 * * * * sleep N; your job

Leo Chu
fuente
44
No veo nada de malo en esto; de hecho, esto es muy similar a cómo el trabajo cron de certbot logra un desplazamiento aleatorio que ayuda a mantener la carga del servidor equilibrada. seguro no merece todos esos
votos negativos
66
Esto me hizo preguntarme cómo dormir un número aleatorio de segundos. sleep `shuf -i 1-100 -n 1`Hace el truco.
Laizer
maldita sea, @Laizer me hiciste aprender algo de nuevo! (¡gracias!)
UncaAlby