1 ジョブごとに worker を終了させて god で再度起動させる、あまり良くない方法です。
ジョブ。グローバル変数 $exit を true にすると、job から worker を終了させられます。
class HogeJob def perform .. (leaking process) .. $exit = true end end
delayed_job 監視 god 設定ファイル。5 秒ごとに監視。
RAILS_ROOT/config/delayed_job.god などに保存。
RAILS_ROOT = File.expand_path('..', File.dirname(__FILE__)) RAILS_ENV = 'production' God.watch do |w| w.name = 'delayed_job' w.pid_file = "#{ RAILS_ROOT }/tmp/pids/delayed_job.pid" w.start = "cd #{ RAILS_ROOT }; RAILS_ENV=#{ RAILS_ENV } script/delayed_job start" w.restart = "cd #{ RAILS_ROOT }; RAILS_ENV=#{ RAILS_ENV } script/delayed_job restart" w.stop = "cd #{ RAILS_ROOT }; RAILS_ENV=#{ RAILS_ENV } script/delayed_job stop" w.start_if do |start| start.condition(:process_running) do |c| c.interval = 5.seconds c.running = false end end end