我有一个从盐栈部署的Windows服务。州看起来像这样
create_executable:
module.run:
- name: service.create
- m_name: SVC1
- bin_path: d:\svc1.exe
- start_type: auto
现在,当我重新部署服务时,它会说"异常:服务已经存在:SVC1"。有没有办法测试服务是否正在运行?如果是 服务正在运行,我想停止它,禁用它,删除它然后重新创建它。
答案 0 :(得分:1)
在这种情况下,使用unless
功能的module.wait和cmd.run可能会有所帮助。
您需要一种很好的方法来检查服务是否未安装,并在除非测试中使用它。命令本身可能类似于echo
- 这并不重要。您现在可以使用watch
或watch_in
来module.wait
依赖cmd.run
。
未经测试的草稿(请注意,我根本不知道Windows cli):
check_if_service_installed:
cmd.run:
name: echo 'not installed'
unless: 'if exists c:\svc1.exe'
create_executable:
module.wait:
- name: service.create
- m_name: SVC1
- bin_path: d:\svc1.exe
- start_type: auto
- watch:
- cmd: check_if_service_installed
写完之后我觉得这对你想要达到的目标来说有点复杂。也许一个小批量或PowerShell脚本负责能够再次执行更直接。但这是IMO的品味问题。