如何通过Chef cookbook开始resque工作?

时间:2014-02-24 17:24:42

标签: chef resque chef-recipe cookbook

我是Chef的新手,我想通过我的配方在每次部署后重新启动云节点上的resque worker。有一个Rake任务,resque提供启动工人

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

要停止它,我grep resque进程并手动杀死它。

我无法找到关于如何在Chef services中运行rake任务的任何好例子。有人可以帮我提供一个样本服务吗?我会打算做什么?

1 个答案:

答案 0 :(得分: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

理想情况下,stopstartrestart机制将由适当的服务处理,但无论如何整体模式都是相同的。

notifies属性只有在修改application资源时才会启动(通常这意味着新的部署)。

有关通知的更多信息in the Chef docs


穷人的服务可能是这样的:

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