В моем приложении используется 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:
Нашли хорошую нить об этом же номере.
Я попытался остановить 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
И вот что зарегистрировано 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
Вы должны используйте 'sidekiq -t 120', чтобы установить тайм-аут завершения работы Sidekiq. Тайм-аут sidekiqctl - это то, как долго он будет ждать, прежде чем убить sidekiq. –