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

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

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

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

У кого-либо есть какие-либо идеи?

С уважением, Bernie

На основе ответа ниже, это - то, что я придумал. Просто поместите его в конфигурацию/инициализаторы, и Вы все установлены:

#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
11
задан btelles 7 April 2010 в 00:06
поделиться

1 ответ

Проверить наличие файла PID демонов ( File.exist? ... ). Если он там, то предположите, что он работает, иначе запустите его.

5
ответ дан 3 December 2019 в 08:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: