2013-04-15 7 views

risposta

3

Per quanto ne so, Sidekiq non ha modo di cancellare un lavoro di programmazione per ora. Ho scritto un servizio che mi consente di cancellare le mie mail programmate a causa di ciò. Ma di cancellare le operazioni abbastanza facile con i comandi Redis:

Si ottiene i lavori orari in questo modo:

schedules_jobs = $redis.zrange "schedule", 0, -1, {withscores: true} 

Quindi si ottiene una serie di posti di lavoro e si sceglie uno di lavoro ed e annullare in questo modo:

$redis.zrem "schedule", schedules_jobs[0] 
15

Ho recentemente scritto un po 'di codice per gestirlo, è disponibile nel mio ramo della gemma sidekiq-status. È possibile visualizzare, o usarlo qui: https://github.com/Robinson7D/sidekiq-status

(si dovrebbe utilizzare che come le informazioni git: nel Gemfile, attualmente, fino al bivio principale del progetto implementa questa)

di usarlo , prima di memorizzare il job_identifier:

job_identifier = MyWorker.perform_at(3.hours.from_now, 'mike', 1) 

E quando si vuole distruggerlo si chiama il metodo Sidekiq :: Status.cancel:

Sidekiq::Status.cancel job_identifier 

Modifica: da quando ho scritto questo post, il mio codice è stato accettato nel fork principale di Sidekiq :: Status - https://github.com/utgarda/sidekiq-status. Non devi più usare la mia forchetta. Sulla forcella di Utgarda si innescherebbe chiamando non programmata, invece di annullare:

Sidekiq::Status.unschedule job_identifier 

seguito: è anche possibile eliminare i lavori utilizzando la gemma Sidekiq normale come spiegato qui: https://github.com/mperham/sidekiq/wiki/API (anche se per i loro metodi si richiede l'unix-timestamp di quando il lavoro è pianificato per - non è possibile eliminare solo con l'id del lavoro, se si desidera eliminare un lavoro senza il timestamp, il metodo Sidekiq :: Status potrebbe essere giusto per te).

Tuttavia, invece dei modi in cui delineano nel wiki mi sento di raccomandare qualcosa lungo le linee di Sidekiq::ScheduledSet.new().delete(unix_timestamp, jid) se si desidera eliminare solo un posto di lavoro.)

Problemi correlati