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.