我编写了一个脚本,将其作为服务触发。当我调用时,service myservice start
服务可以正常启动。但是,当使用 chef 触发同一服务时,服务不会启动。我的 chef 服务代码如下所示
service "myservice" do
supports :status => true, :restart => true, :reload => true
action [ :enable, :start ]
end
我使用 调用脚本knife bootstrap <ip> -r 'recipe[testservice]'
。我这里遗漏了什么?谢谢帮助!
答案1
您的脚本中很可能存在一些错误/etc/init.d/myservice
。当您说您的服务支持status
命令时,chef 将运行service myservice status
并检查退出代码。如果退出代码为 0,则假定服务正在运行。您的脚本应以非零代码退出。
答案2
Chef 启动服务时,首先会检查服务是否已在运行(在 CentOS 上为“/sbin/service myservice status”)。如果确定服务已在运行,则不会启动,也不会在高于调试级别的级别记录任何内容:
https://github.com/opscode/chef/blob/master/lib/chef/provider/service.rb#L87
答案3
我遇到了同样的问题,实际上 chef 11 服务器依靠操作 :status 来启动服务。因此,就像脚本中的操作启动和停止一样,您还需要操作状态,它将返回脚本的当前状态。