Бригадир спасателей не смог запустить рабочих

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

Скрипт мастера worker: bundle exec rake resque:work BACKGROUND=true QUEUE=image VERBOSE=true

Когда я запускаю скрипт, это результат, который я получаю.

$ foreman start
22:00:38 worker.1 | started with pid 882
22:00:38 worker.1 | exited with code 0
22:00:38 system   | sending SIGTERM to all processes
SIGTERM received

Кажется, что процесс завершился, но когда я смотрю журнал ps -eaf | grep resque, он показывает, что resque worker работает с pid 884. Я тестировал это, и его pid всегда +2, чем оригинал.

Когда я запускаю команду bundle exec прямо из терминала без бригадира, команда выполняется просто отлично. Есть ли что-то, чего мне не хватает в скрипте мастера?


person Leo Correa    schedule 07.09.2012    source источник


Ответы (2)


Таким образом, очевидно, что при запуске BACKGROUND=true рабочие resque демонизируются, и, следовательно, исходный pid удаляется, а новый создается как процесс-сирота для рабочего.

Тем не менее, существует проблема при создании двух фоновых рабочих процессов с помощью мастера, потому что, как только один из рабочих будет демонизирован, мастер завершит все процессы, и будет создан только один демонизированный рабочий процесс вместо двух.

person Leo Correa    schedule 10.09.2012

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

image_worker: bundle exec rake resque:work QUEUE=image VERBOSE=true
other_worker: bundle exec rake resque:work QUEUE=other VERBOSE=true

Чтобы запустить несколько рабочих процессов в одной очереди:

foreman start -m image_worker=2
person Ralf    schedule 17.12.2012