【问题标题】:Chef service restart_command not running on AWS opsworks instnaceChef 服务重启命令未在 AWS opsworks 实例上运行
【发布时间】:2018-07-20 00:13:12
【问题描述】:

我们正面临一个奇怪的问题,即 Chef 服务定义上的 restart_command 未执行。我们在 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)

但是当我们检查服务器本身时,celery-workers 并没有重新启动。从服务器上的 restart_command 手动执行命令,没有任何问题。因此,似乎 Chef 出于某种原因没有执行此 restart_command:

'sv force-stop celery-worker-1 ; sv start celery-worker-1'

提前感谢您的帮助。

【问题讨论】:

    标签: amazon-web-services chef-infra celery chef-recipe aws-opsworks


    【解决方案1】:

    这意味着node[:opsworks][:instance][:layers].include?('celery-worker') 为假或deploy_revision[testapp] 未更新。对于后者,您可以在输出中看到,如果您得到类似 deploy_revision[testapp] (up-to-date) 的信息,那么它不会更新,因此不会触发通知。对于图层数据,您必须手动检查。

    【讨论】:

    • 感谢您的回复。这是可能的,尽管除了我在上面粘贴的两行之外,我在日志中没有看到任何关于它的内容。我认为由于这个 deploy_revision 在一个额外的 if 语句中,它仍然会在它之前执行服务重启的东西,或者不是这样: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'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    • 2014-07-28
    • 2016-03-01
    • 2020-04-11
    相关资源
    最近更新 更多