#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 /…