Se avete voglia di uccidere/fermare un lavoro continuo senza contrassegnare come un processo non riuscito, è possibile utilizzare questo hack.
Ora, dove si desidera interrompere questo codice, è sufficiente raggiungere l'operatore resque che sta eseguendo il lavoro che si desidera interrompere. e uccidi il processo figlio di suo figlio. Qualcosa come uccidere il processo di un nipote di Operaio.
Spiegazione: forcelle
Un operaio che un processo figlio in cui svolgere funzione di eseguire il suo codice. Se uccidiamo direttamente questo processo figlio, questo lavoro verrà interrotto ma verrà contrassegnato come lavoro non riuscito. Ecco perché abbiamo avviato un altro processo figlio in self.perform e ora il processo figlio di esecuzione di kill interrompe questo processo in esecuzione e inoltre, non verrà contrassegnato come non riuscito. Ora possiamo nuovamente accodare il lavoro. Quindi, il compito è quello di come raggiungere il lavoratore che fa il lavoro che dobbiamo smettere di
sono riuscito a farlo scrivendo questo codice per un sistema basato su UNIX (._. "):
Resque.workers.each do |worker|
#If condition : "current worker is working and is working on the job that we want to stop and is operating on the queue that we require " and please change this condition as per your requirement
if worker.working? and worker.queues.include?("queue_name") and worker.job["payload"]["args"].first==post_id
victim = %x[pgrep -P #{worker.pid}] #Getting child's PID
victim.strip!
victim = %x[pgrep -P #{victim}] #Getting grandchild's PID of worker
victim.strip!
%x[kill -9 #{victim.to_i}]
end
end
fonte
2017-01-28 05:32:07
http://stackoverflow.com/questions/7416318/how-do-i-a-ear-stuck-stale-resque-workers – snowangel