Sì, sì, la questione è più di un anno, ma forse posso aggiungere qualcosa di utile:
Come cron qualcosa in un caso offset di 20 volte al giorno 9:00-23:00? È piuttosto complicato in cron, perché stai dividendo 14 ore per 20 tempi di esecuzione. Le altre risposte non mi piacciono molto perché richiedono la scrittura di uno script di wrapper bash per il tuo script php.
Tuttavia, se mi permettete la libertà di facilitare i tempi e la frequenza di restrizione a 13 volte tra le 8:30 e le 23:09, questo potrebbe fare il trucco, e tutto entro i confini del vostro crontab:
$ {RANDOM: 3: 2} utilizza bash's $ RANDOM che altre persone hanno menzionato sopra, ma aggiunge il bash array slicing. Poiché le variabili di bash non sono tipizzate, il numero a 16 bit con segno pseudo-casuale viene troncato alle prime 2 delle 5 cifre decimali, fornendo una breve corrispondenza per ritardare il cronjob tra 10 e 99 minuti (sebbene la distribuzione sia distorta verso 10 a 32).
Il seguente potrebbe funzionare anche per te, ma ho trovato che è "meno casuale" per qualche ragione (forse la legge di Benford è innescata modulando numeri pseudo-casuali.Ehi, non lo so, ho bocciato la matematica. .. Date la colpa a bash):!
30 8-21/* * * * sleep $[RANDOM\%90]m ; /path/to/script.php
è necessario per rendere il modulo come '\%' sopra, perché cron (beh, almeno Linux 'vixie-cron') termina la linea quando incontra un escape ' %'.
Forse potresti ottenere le restanti 7 esecuzioni di script lì aggiungendo un'altra riga con un altro intervallo di 7 ore. Oppure rilassa la tua limitazione per correre tra le 3:00 e le 23:00.
fonte
2013-04-29 23:07:30
La domanda non è molto ben presentata. In definitiva, si desidera distribuire 20 punti sull'asse del tempo tra le 9:00 e le 11:00. Ma ci sono vincoli sulla differenza temporale minima? Non è accettabile nulla tra le 9 e le 10:30? L'unico modo per farlo in modo accettabile sembra l'idea di Klaus: seleziona le tue 20 volte alle 09:00, che ti permettono di soddisfare qualsiasi vincolo che potresti avere, quindi pianifica le cose con "at". –