мониторинг нескольких отложенных рабочих заданий с помощью monit

#ruby-on-rails #delayed-job #monit

#ruby-on-rails #отложенное задание #monit

Вопрос:

Я много читал о мониторинге delayed_job с помощью monit. Реализация довольно проста и прямолинейна. Но когда одного работника недостаточно, как мне настроить monit, чтобы гарантировать, что, скажем, 10 работников постоянно запущены?

Ответ №1:

Вы можете просто повторить ту же конфигурацию, которая у вас есть, для первого рабочего N раз. Предположим, у вас есть 5 работников, вы будете отслеживать их всех с помощью следующего:

 check process delayed_job.0
   with pidfile /path/to/shared/pids/delayed_job.0.pid
   start program = "/bin/su -c '/usr/bin/env RAILS_ENV=production /path/to/current/script/delayed_job -n 5 start' - user"
   stop program = "/bin/su -c '/usr/bin/env RAILS_ENV=production /path/to/current/script/delayed_job stop' - user"

check process delayed_job.1
   with pidfile /path/to/shared/pids/delayed_job.1.pid
   start program = "/bin/su -c '/usr/bin/env RAILS_ENV=production /path/to/current/script/delayed_job -n 5 start' - user"
   stop program = "/bin/su -c '/usr/bin/env RAILS_ENV=production /path/to/current/script/delayed_job stop' - user"

check process delayed_job.2
  with pidfile /path/to/shared/pids/delayed_job.2.pid
  start program = "/bin/su -c '/usr/bin/env RAILS_ENV=production /path/to/current/script/delayed_job -n 5 start' - user"
  stop program = "/bin/su -c '/usr/bin/env RAILS_ENV=production /path/to/current/script/delayed_job stop' - user"

check process delayed_job.3
  with pidfile /path/to/shared/pids/delayed_job.3.pid
  start program = "/bin/su -c '/usr/bin/env RAILS_ENV=production /path/to/current/script/delayed_job -n 5 start' - user"
  stop program = "/bin/su -c '/usr/bin/env RAILS_ENV=production /path/to/current/script/delayed_job stop' - user"

check process delayed_job.4
  with pidfile /path/to/shared/pids/delayed_job.4.pid
  start program = "/bin/su -c '/usr/bin/env RAILS_ENV=production /path/to/current/script/delayed_job -n 5 start' - user"
  stop program = "/bin/su -c '/usr/bin/env RAILS_ENV=production /path/to/current/script/delayed_job stop' - user"
  

Комментарии:

1. Не может ли это привести к проблемам, если, например, отключится только delayed_job.4.pid? Разве это не запустило бы еще 5 узлов?

2. @Bradley нет, этого не произойдет, если вы попытаетесь запустить 5 рабочих, в то время как, например, 2 уже запущены, delayed_job запустит только 3 новых рабочих и сохранит эти первые 2 запущенными.

3. @NafaaBoutefer Большое вам спасибо за этот комментарий! Я не знал об этом поведении, и это спасло меня от множества проблем. Я проверил с помощью gist.githubusercontent.com/paneq /…