我有一些工作需要很长时间才能完成。通常1-3个小时。 我使用gem“守护进程”来守护延迟的工人。 如果我使用rake任务:“script / delayed_job stop”来阻止它们,那么它们将不会停止直到 工人完成......
是否有一个很好的简单解决方案来阻止这些工作?
我设法做了一个,但也欢迎任何其他建议。
这个想法是:
以下是代码:
def self.prepare_to_be_stopped_by_daemons
self.old_trap = Signal.trap("TERM") do
self.should_terminate = true
end
end
def check_the_stop_signal_by_daemons
if self.class.should_terminate
Delayed::Worker.logger.debug "Asked to be TERMINATED. Calling the old trap." if Delayed::Worker.logger
self.class.restore_old_trap
Process.kill("TERM", Process.pid)
raise StopCrawlingException.new
end
end
def self.restore_old_trap
Signal.trap("TERM", old_trap)
end