Chef infra 如何在chef for windows中检查是否安装了服务并启动服务(如果已安装),或者如果安装并启动服务

Chef infra 如何在chef for windows中检查是否安装了服务并启动服务(如果已安装),或者如果安装并启动服务,chef-infra,action,Chef Infra,Action,如何在chef for windows中检查是否安装了服务并启动服务(如果已安装),或者如果安装并启动服务 if service "VigilEntAgent" supports :status => false then package 'VigilEntAgent' do source 'xxx' action :install end else service "VigilEntAgent" do action :start end 您可以检查windows服务是否

如何在chef for windows中检查是否安装了服务并启动服务(如果已安装),或者如果安装并启动服务

if service "VigilEntAgent" 
 supports :status => false then 
 package 'VigilEntAgent' do
source 'xxx'
 action :install
end
else 
 service "VigilEntAgent" do
 action :start
end

您可以检查windows服务是否安装了

::Win32::Service.exists?( '<service_name>' )
::Win32::Service.exists?(“”)

但是,如果您使用
package
资源来安装服务,很可能您只需要为
package
资源提供一个正确的名称。您在控制面板\所有控制面板项目\程序和功能中看到的一个。Chef将检查已安装的软件包,不会再次尝试安装。

Chef被设置为幂等,您应该做的是:

package 'VigilEntAgent' do  
  source 'xxx'   
  action :install  
end   

windows_service "VigilEntAgent"   
  action :start
end
服务名称必须与windows服务管理器中的服务短名称相匹配,您可以使用
NET START
从命令行IIRC启动它

windows\u服务
资源自12日起可用


参考资料文档如下:

不幸的是,Windows服务往往不是这样工作的,特别是
status\u命令
。Windows平台上的服务比Unix平台上的服务更复杂。我很确定我以前做过这件事(针对基于nssm的服务),但这可能仍然是由老客户机处理的,并且包含大量的黑客攻击。