başarısız bir iş olarak işaretleyerek olmadan devam eden bir işi durdurma/öldürme gibi hissediyorum, bu kesmek kullanabilirsiniz. Eğer durdurmak bu kod istiyorum Şimdi
class Task
@queue = :queue_name
def self.perform(parameters)
pid = Process.fork do
Task.work parameters
end
#puts "parent, pid #{Process.pid}, waiting on child pid #{pid}"
Process.wait
end
def self.work(parameters)
#Your perform code here
end
end
, sadece şu anda durdurmak istediğiniz iş yapıyor resque işçiye ulaşır. ve çocuğunun çocuk sürecini öldürür. İşçinin torun sürecini öldürmek gibi bir şey.
Açıklama:
Bir işçi çatallar kodunu çalıştırmak hangi gerçekleştirmek fonksiyonu bir çocuk süreç. Bu çocuk sürecini doğrudan öldürürsek, bu iş duracak, ancak başarısız bir iş olarak işaretlenecektir. İşte bu yüzden kendi kendine bir başka çocuk süreci oluşturduk ve şimdi gerçekleştirdiğimiz işi öldürmek, bu işini durduracaktır ve aynı zamanda başarısız olarak işaretlenmeyecektir. Şimdi tekrar işimizi yapabiliriz. Yani, görev durmamız gereken iş yaptığını işçiye nasıl ulaşacağını etmektir Bunu başarmış
UNIX tabanlı sistem için bu kodu yazarak (._ ".):
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
http://stackoverflow.com/questions/7416318/how-do-i-clear-stuck-stale-resque-workers – snowangel