2009-10-28 9 views
7

Uso il lavoro differito per gestire il lavoro in background.
Tuttavia, ho alcune attività che devono essere eseguite a intervalli regolari. Ogni ora, ogni giorno o ogni settimana, ad esempio.Lavori ritardati regolari

Per ora, quando eseguo l'operazione, ne creo uno nuovo da eseguire in un giorno/settimana/mese.

Tuttavia non mi piace molto. Se per qualsiasi motivo, l'attività non è completamente eseguita, non creiamo la successiva e potremmo perdere l'esecuzione dell'attività.

Come gestisci questo tipo di cose (con un lavoro ritardato) nelle app dei tuoi binari per assicurarti che il tuo normale elenco di attività rimanga corretto?

risposta

5

Se si ha accesso a Cron, mi raccomando Ogni volta

http://github.com/javan/whenever

di specificare ciò che si desidera eseguire e in quale frequenza semplice rubino morti, e ogni volta che le forniture rastrello compiti per convertire questo in un crontab e per aggiornare il crontab del tuo sistema.

Se non hai accesso al cron frequente (come non lo so, dato che siamo su Heroku), allora DJ è la strada da percorrere.

Hai un paio di opzioni.

  1. Fai quello che stai facendo. DJ ripeterà ogni attività un certo numero di volte, quindi avrai un po 'di clemenza

  2. Inserisci il codice che crea il successivo lavoro di DJ in un blocco di sicurezza, per assicurarti che venga creato anche dopo un'eccezione o un altro evento non valido

  3. Creare un altro DJ che viene eseguito periodicamente, controlla per assicurarsi che esistano i DJ appropriate, e li crea se non lo fanno. Naturalmente, questo è altrettanto suscettibile di errori come le altre opzioni, dal momento che il monitor e il DJ reale sono entrambi in esecuzione nello stesso ambiente, ma è qualcosa.

+0

Bella cosa, ogni volta. Con alcuni compiti che mi permettono di ricaricare il crontab quando cambio qualcosa (ho bisogno di cambiare i compiti dinamicamente). Grazie :) –

1

C'è qualche ragione particolare per cui non dovresti usare cron per questo tipo di cose? O forse qualcosa di più rubino come rufus-scheduler, che è piuttosto easy to use e molto affidabile.

Se non hai bisogno di fare la fila, questi strumenti sono la strada da percorrere, credo.

+1

Beh ho già il demone lavoro in ritardo. E vorrei evitare di lanciare un secondo. –

+0

Non è necessario avviare alcun nuovo demone con rufus-scheduler. Utilizza un ciclo semplice o EventMachine per verificare l'esecuzione dei lavori. cron è un demone, ma di solito ne hai bisogno e comunque funziona. –