检查是否已安装服务

and*_*810 2 service chef-infra

如何检查节点上是否安装了服务(debian和cent os/amazon)?

如果已安装,我想停止并禁用该服务.如果服务不存在,我在停止服务时遇到异常: Chef :: Exceptions :: Service:/etc/init.d/service不存在!

最好的问候安德烈

Ten*_*bai 5

一种解决方案是在服务资源中添加一个后卫:

service "my_service" do
  action :stop,:disable
  only_if { File.exist?("/etc/init.d/my_service") }
end
Run Code Online (Sandbox Code Playgroud)

另一个是保护资源本身的定义:免责声明:这是此示例的未经测试的代码.

service "my_service" do 
  action :stop,:disable
end.if File.exist?("/etc/init.d/my_service")
Run Code Online (Sandbox Code Playgroud)

最后一个更直观

if File.exist?("/etc/init.d/my_service")
  service "my_service" do 
      action :stop,:disable
  end
end
Run Code Online (Sandbox Code Playgroud)

第一个示例与其他示例之间的主要区别在于,第一个示例将在编译时将资源添加到集合中,而另一个仅在文件存在的情况下才会向集合添加资源,以便在此服务不存在时避免使用该服务的新对象.

精确,最后两个解决方案有一点缺点,如果另一个配方安装服务,他们将不会在第一时间看到它,因为编译配方时文件不存在,所以你可能最终将服务运行到下一个厨师的运行.