Cron job, avvio casuale ma entro i tempi


11

Voglio che uno script venga eseguito una volta al giorno, tutti i giorni, a partire da 0900 a 1200.
Non sono completamente sicuro della sintassi del trattino - significa che lo script verrà eseguito OGNI ora tra 9-12, o che inizierà RANDOMLY tra 9-12? Perché ho bisogno di quest'ultimo.

Risposte:


7

Non ho mai visto un'implementazione cron che ha un modo per eseguire un lavoro in un momento casuale. È un requisito strano. Come indica la documentazione, 9-12è una scorciatoia per 9,10,11,12e significa ogni ora dalle 9 alle 12.

Se si desidera eseguire un lavoro in un momento casuale, eseguire il lavoro all'inizio dell'intervallo e aggiungere un ritardo casuale. Ad esempio, per eseguire a un'ora casuale tra 9 e 12:

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

Nota che RANDOMrichiede bash o ksh, potrebbe non essere disponibile nella shell predefinita.

Se si desidera eseguire in modo casuale tra 9 e 12, con una seconda risoluzione, è possibile utilizzare RANDOM % 10800come ritardo, ma poiché RANDOMè compreso nell'intervallo 0..32767, ci sarà una propensione per i ritardi tra 0 e 32768% 10800 = 368. Per evitare questo pregiudizio:

SHELL=/bin/bash
0 9 * * * max=$((32768/10800*10800)); while delay=$RANDOM; ((delay > max)); do :; done; sleep $((delay % 10800)); do_stuff

5
"È un requisito strano." Non sono d'accordo. Molte applicazioni, in particolare quelle che devono effettuare periodicamente il check-in con un server (come gestori di pacchetti o client di gestione della configurazione), devono visualizzare i tempi di esecuzione al fine di evitare una situazione di mandria tuonante . In effetti, molte di queste applicazioni dispongono di opzioni di visualizzazione integrate (ad es. --randomwaitArgomento su yum o --splayargomento su chef-client), ma per quelli che non lo fanno, un tempo di esecuzione casuale sarebbe una caratteristica utile da avere in un pianificatore di lavoro.
Jayhendren,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.