Как запустить спасателей через поваренную книгу Chef?

Я новичок в Chef и хочу перезапускать Resque Workers на облачном узле после каждого развертывания по моему рецепту. Существует задача Rake, которую resque предоставляет для запуска рабочих.

QUEUE='*' bundle exec rake environment resque:work >>/log/resque.log 2>&1 &

чтобы остановить его, я выбираю процесс восстановления и вручную убиваю его.

Мне не удалось найти хороших примеров запуска задач rake в сервисах Chef. Может ли кто-нибудь помочь мне с образцом услуги, которая будет делать то, что я собираюсь сделать?


person Infant Dev    schedule 24.02.2014    source источник


Ответы (1)


Создайте ресурс execute с action :nothing, который будет использоваться для перезапуска воркеров (при необходимости адаптируйте):

execute "restart_resque_workers" do
  command "pkill resque && QUEUE='*' bundle exec rake environment resque:work >>/log/resque.log 2>&1 &"
  cwd "/path/to/app"
  action :nothing
end

Затем в ресурсе развертывания добавьте:

application "app" do
  ...
  notifies :run, "execute[restart_resque_workers]"
end

В идеале механизм stop, start и restart должен обрабатываться соответствующей службой, но в любом случае общая схема одинакова.

Атрибут notifies срабатывает только в том случае, если ресурс application изменен (обычно это означает новое развертывание).

Подробнее об уведомлениях в документации Chef.


Служба бедняка могла бы проходить так:

service 'resque_workers' do
  start = "QUEUE='*' bundle exec rake environment resque:work >>/log/resque.log 2>&1"
  stop = "pkill resque"
  start_command start
  stop_command stop
  restart_command "#{stop}; #{start}"
  supports [ :start, :stop, :restart ]
end

Затем используйте notifies :restart, "service[resque_workers]" в ресурсе application.

person cassianoleal    schedule 25.02.2014
comment
Спасибо, что написали о сервисе.. :) - person Infant Dev; 28.02.2014
comment
НП! Я только что сделал что-то подобное для одной из своих кулинарных книг, поэтому я поместил это здесь. :) Обратите внимание, что это не настоящая служба, которой вы можете управлять в ОС с помощью service rescue_workers start/stop. Если по какой-либо причине вам нужно управлять им на самом ящике, вам все равно нужно будет запускать команды самостоятельно. - person cassianoleal; 28.02.2014