2016-12-28 81 views
0

我有一個Windows服務,我從鹽堆中部署。狀態看起來像這樣鹽堆如果然後服務

create_executable: 
    module.run: 
    - name: service.create 
    - m_name: SVC1 
    - bin_path: d:\svc1.exe 
    - start_type: auto 

現在,當我重新部署該服務,它說:「例外:服務已經存在:SVC1」。有沒有辦法測試服務是否正在運行?如果服務正在運行,我想停止它,禁用它,刪除它然後重新創建它。

回答

1

也許module.wait連同cmd.run使用unless功能可能有助於在這種情況下。

您需要一個很好的方法來檢查服務未安裝並在除非測試中使用此項。命令本身可能類似於echo - 它並不重要。您現在可以使用watchwatch_in使module.wait依靠cmd.run

未經測試的草案(請注意,我不知道Windows的命令行所有):

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的品味問題。

+0

我想在我的狀態文件中使用Jinja模板。這是一個很好的方式來使用他們這樣的東西? – NinjaGaiden

+0

這種方法經常用於公式 - 應該是現成的。看到你的結果會很有趣,如果這有效的話。在這種情況下,你通常不能訪問奴才數據,但穀物數據除外。所以糧食可能是必要的。 – dahrens

+0

是的,我很難找到系統上是否存在服務。它很難區分存在,可用性和運行。 – NinjaGaiden