我是Chef的新手,我想通过我的配方在每次部署后重新启动云节点上的resque worker。有一个Rake任务,resque提供启动工人
QUEUE='*' bundle exec rake environment resque:work >>/log/resque.log 2>&1 &
要停止它,我grep resque进程并手动杀死它。
我无法找到关于如何在Chef services中运行rake任务的任何好例子。有人可以帮我提供一个样本服务吗?我会打算做什么?
答案 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
理想情况下,stop
,start
和restart
机制将由适当的服务处理,但无论如何整体模式都是相同的。
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
。