2014-08-28 4 views
0

В моем приложении используется Sidekiq для обработки длинных (нескольких минут) фоновых задач. Развертывания выполняются с помощью Capistrano 2, и все процессы контролируются Monit.Настройка развертывания с помощью Capistrano, Sidekiq и Monit

Я использовал capistrano-sidekiq для управления процессом sidekiq во время развертывания, но он не работал отлично. Несколько раз во время развертывания запускается новый процесс sidekiq, но старый не убивается. Я считаю, что это происходит потому, что capistrano-sidekiq не работает через Монит во время развертывания.

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

Я думал о чем-то вроде этого в моем развертывания сценария

Когда начинается развертывание:

  • Я говорю Monit к unmonitor этому процессу sidekiq
  • Я остановить текущий процесс sidekiq и дать ему 10 минут до завершения своих задач

После того, как код обновлен:

  • Я начинаю новый процесс sidekiq и говорю Мониту, чтобы начать его мониторинг.

Возможно, мне понадобится переместить файл pid sidekiq process в каталог выпуска, если файл pid не будет удален до тех пор, пока не завершится процесс прекращения sidekiq.

Как это звучит? Любые оговорки замечены?

EDIT:

Нашли хорошую нить об этом же номере.

http://librelist.com/browser//sidekiq/2014/6/5/rollback-signal-after-usr1/#f6898deccb46801950f40ad22e75471d

ответ

0

Кажется разумным мне. Единственная возможная проблема - это потерять старый идентификатор Sidekiq, но вы можете использовать ps и grep для «остановки», чтобы найти старые Sidekiq.

+0

Я попытался остановить sidekiq раньше: update_code с помощью команды 'if [-d/home/staging/current] && [-f /home/staging/shared/pids/sidekiq.pid] && kill -0 cat /home/staging/shared/pids/sidekiq.pid>/dev/null 2> & 1; затем cd/home/staging/current && bundle exec sidekiqctl stop /home/staging/shared/pids/sidekiq.pid 120; else echo 'Sidekiq не работает'; fi', но он не дождался 120 секунд. Вместо этого он убил поток sidekiq через 8 секунд. – Mika

+0

И вот что зарегистрировано 2014-09-20T21: 00: 38Z 25932 TID-ae9x4 INFO: выключение 2014-09-20T21: 00: 39Z 25932 TID-13ikrg INFO: выключение 24 тихих работников 2014-09 -20T21: 00: 39Z 25932 TID-13ikrg INFO: пауза до 8 секунд, чтобы работники могли закончить ... 2014-09-20T21: 00: 47Z 25932 TID-13ikrg WARN: Завершение 1 занятых рабочих потоков – Mika

+0

Вы должны используйте 'sidekiq -t 120', чтобы установить тайм-аут завершения работы Sidekiq. Тайм-аут sidekiqctl - это то, как долго он будет ждать, прежде чем убить sidekiq. –

 Смежные вопросы

  • Нет связанных вопросов^_^