我们正面临一个奇怪的问题,restart_command on Chef服务定义未执行。我们在AWS OPSWorks中执行了一个任务,该任务正在执行以下服务定义:
service "celery-worker-1" do
action [ :nothing ]
supports :restart=>true, :status=>true
retries 3
restart_command 'sv force-stop celery-worker-1 ; sv start celery-worker-1'
if node[:opsworks][:instance][:layers].include?('celery-worker')
subscribes :restart, "deploy_revision[testapp]", :delayed
end
end
然后在文件的末尾从通知
调用这一点 elsif node[:opsworks][:instance][:layers].include?('celery-worker')
notifies :restart, resources(:service => "celery-worker-0", :service => "celery-worker-1")
从OPSWorks执行此任务时,日志没有显示错误或问题:
[2018-02-09T08:33:34+00:00] INFO: Processing service[celery-worker-0] action nothing (testapp::configure line 17)
[2018-02-09T08:33:34+00:00] INFO: Processing service[celery-worker-1] action nothing (testapp::configure line 27)
但是,当我们检查服务器本身时,芹菜工人没有重新启动。从服务器上的RESTART_COMMAND手动执行命令,没有任何问题。因此,由于某种原因,看来厨师没有执行此restart_command:
'sv force-stop celery-worker-1 ; sv start celery-worker-1'
事先感谢您的帮助。
这意味着node[:opsworks][:instance][:layers].include?('celery-worker')
是false或deploy_revision[testapp]
未更新。对于后者,您可以在输出中看到,如果您获得了诸如deploy_revision[testapp] (up-to-date)
之类的内容,则不会更新,因此没有通知触发器。对于图层数据,您必须手动检查。