आप एक असफल काम के रूप में यह अंकन के बिना की मौत हो गई/चल रहे एक काम रोक की तरह महसूस करते हैं, तो आप इस हैक का उपयोग कर सकते हैं।
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
अब, जहां आप अपने बंद इस कोड को चाहते हैं, बस वर्तमान में काम जो आप बंद करना चाहते कर resque कार्यकर्ता तक पहुँचने। और अपने बच्चे की बाल प्रक्रिया को मार डालो। श्रमिक की पोते की प्रक्रिया को मारने की तरह कुछ।
स्पष्टीकरण:
एक कार्यकर्ता कांटे एक बच्चे प्रक्रिया है जिसके प्रदर्शन समारोह में अपनी कोड चलाते हैं। अगर हम सीधे इस बच्चे की प्रक्रिया को मार देते हैं, तो यह नौकरी रुक जाएगी लेकिन इसे असफल नौकरी के रूप में चिह्नित किया जाएगा। यही कारण है कि हमने स्वयं में एक और बाल प्रक्रिया को फोर्क किया है। अब प्रदर्शन की बाल प्रक्रिया को मारने से यह चल रही नौकरी बंद हो जाएगी और इसे असफल के रूप में चिह्नित नहीं किया जाएगा। अब हम नौकरी को फिर से लगा सकते हैं।
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
: तो, काम के लिए एक यूनिक्स आधारित प्रणाली के लिए इस कोड को लिख कर कैसे कर्मी को कार्य है कि हम रोकने की आवश्यकता कर तक पहुँचने के लिए है
मैं यह करने में कामयाब रहे (._ "।)
स्रोत
2017-01-28 05:32:07
http://stackoverflow.com/questions/7416318/how-do-i-clear-stuck-stale-resque-workers – snowangel