Запустите или убедитесь, что отложенное задание запускается при перезапуске приложения / сервера

Мы должны использовать delayed_job (или какой-либо другой процессор фоновых заданий) для запуска заданий в фоновом режиме, но мы не можем изменять сценарии загрузки / уровни загрузки на сервере. Это означает, что демон не гарантированно останется доступным, если провайдер перезапустит сервер (поскольку демон был бы запущен по рецепту capistrano, который запускается только один раз за развертывание).

В настоящее время лучший способ убедиться, что демон delayed_job всегда запущен, - это добавить инициализатор в наше приложение Rails, которое проверяет, работает ли демон. Если он не работает, то инициализатор запускает демон, в противном случае он просто оставляет его.

Следовательно, вопрос в том, как мы можем определить, что демон Delayed_Job запущен из скрипта? (Мы должны довольно легко запустить демон, но я не знаю, как определить, активен ли он уже).

У кого-нибудь есть идеи?

С уважением, Берни

Исходя из ответа ниже, это то, что я придумал. Просто поместите его в config / initializers, и все готово:

#config/initializers/delayed_job.rb

DELAYED_JOB_PID_PATH = "#{Rails.root}/tmp/pids/delayed_job.pid"

def start_delayed_job
  Thread.new do 
    `ruby script/delayed_job start`
  end
end

def process_is_dead?
  begin
    pid = File.read(DELAYED_JOB_PID_PATH).strip
    Process.kill(0, pid.to_i)
    false
  rescue
    true
  end
end

if !File.exist?(DELAYED_JOB_PID_PATH) && process_is_dead?
  start_delayed_job
end

Ответы на вопрос(4)

Ваш ответ на вопрос