Trabajo Cron, inicio aleatorio pero dentro del plazo

11

Quiero que se ejecute una secuencia de comandos una vez al día, todos los días, comenzando en cualquier momento entre las 0900 y las 1200.
No estoy completamente seguro de la sintaxis del guión. ¿Significa que la secuencia de comandos se ejecutará CADA hora entre 9-12o que comenzará ALEATORIAMENTE entre 9-12? Porque necesito lo último.

little_sg
fuente

Respuestas:

7

Nunca he visto una implementación cron que tenga una manera de ejecutar un trabajo en un momento aleatorio. Es un requisito extraño. Como dice la documentación, 9-12es un acceso directo para 9,10,11,12, y significa cada hora de 9 a 12.

Si desea ejecutar un trabajo en un momento aleatorio, ejecute el trabajo al comienzo del intervalo y agregue un retraso aleatorio. Por ejemplo, para ejecutar a una hora aleatoria entre 9 y 12:

SHELL=/bin/bash
0 9 * * * sleep $((3600 * (RANDOM % 4))); do_stuff

Tenga en cuenta que RANDOMrequiere bash o ksh, es posible que no esté disponible en el shell predeterminado.

Si desea ejecutar un tiempo aleatorio entre 9 y 12, con una segunda resolución, puede usarlo RANDOM % 10800como retraso, pero debido a que RANDOMestá en el rango 0..32767, habrá un sesgo hacia retrasos entre 0 y 32768% 10800 = 368. Para evitar este sesgo:

SHELL=/bin/bash
0 9 * * * max=$((32768/10800*10800)); while delay=$RANDOM; ((delay > max)); do :; done; sleep $((delay % 10800)); do_stuff
Gilles 'SO- deja de ser malvado'
fuente
55
"Es un requisito extraño". Estoy en desacuerdo. Muchas aplicaciones, especialmente aquellas que necesitan registrarse periódicamente con un servidor (como los administradores de paquetes o los clientes de administración de configuración), necesitan extender sus tiempos de ejecución para evitar una situación de rebaño . De hecho, muchas de estas aplicaciones tienen opciones de separación incorporadas (por ejemplo, --randomwaitargumento para yum o --splayargumento para chef-cliente), pero para aquellos que no lo tienen, un tiempo de ejecución aleatorio sería una característica útil para tener en un programador de trabajos.
jayhendren