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:
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.
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 :(
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.
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!)
Respuestas:
Para ejecutar una tarea cada 20 minutos a partir de las 5 pasadas la hora, intente esto:
Explicación
Un
*
campo en el minuto es el mismo que0-59/1
donde0-59
está el rango y1
es 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.fuente
¡Por supuesto!
fuente
5-59/20
es posible, pero5,25,45
tiene la ventaja de que de inmediato queda muy claro lo que hace.Puedes probar:
*/5 * * * * sleep N; your job
fuente
sleep `shuf -i 1-100 -n 1`
Hace el truco.