我正在写一个厨师食谱,我只需要在服务不工作时执行操作(运行批处理)。 我使用这个片段:
batch 'run commnad' do
cwd target_path + '/bin/win64'
code 'command to be executed'
not_if '::Win32::Service.exists?("Service name")'
end
但它似乎不起作用。在看到this问题之后,我使用if子句而不是后卫更改了该过程,并且它可以正常工作:
if !::Win32::Service.exists?("Service name") then
batch 'Install zabbix agent' do
cwd target_path + '/bin/win64'
code 'command to be executed'
end
end
但是,根据我的理解,这不应该是管理这个的正确方法,所以我想知道:为什么警卫不能正常工作?
谢谢, 米歇尔。
答案 0 :(得分:4)
您编写not_if
语句的方式将命令作为shell脚本运行。
shell不知道Ruby代码,因此整个命令都会失败。
为了将not_if
与Ruby代码一起使用,你应该把它放在一个块中:
not_if { Win32::Service.exists?("Service name") }
在此处查看更多示例(在页面上搜索not_if
):
https://docs.chef.io/resource_common.html
答案 1 :(得分:0)
这是工作示例(13号厨师)
require 'win32/service'
windows_service "jenkins" do
action [:stop, :disable]
only_if { ::Win32::Service.exists?("jenkins")}
end