salt远程执行python脚本_SaltStack远程执行Windows job程序(黑窗口)填坑经过
近期接到領導通知,要將公司內的所有Windows服務添加到自動發布系統中,由于這種服務很多,節點分布散亂,每次都是由開發主管手動替換(雖然他們自己開發了自動打包替換工具,但仍需要一臺一臺登陸到服務器上去執行)。
工作需求:讓所有服務(黑窗口的.exe)在前臺cmd顯式運行,不能納入系統服務(不能以服務的形式啟動)。
其實一開始我是懵逼的,雖然很順利的完成了拉取程序代碼,編譯程序,替換文件,停止進程,但在啟動黑窗口時,遇到了問題:
就是通過jenkins的pipeline腳本去調用salt-master分發命令時,后臺服務已經順利跑起來,但是jenkins后臺日志卻卡在這里,導致jenkins的這個job不能正常釋放,這樣的話,自動化發布是算失敗的。
然后我就開始各種查資料,各種測試,搗鼓了好幾天,終于解決了這個問題。
解決這個問題的過程和思路:
①一開始我以為是start命令的問題,然后開始查找各種start命令的參數,全部試了,還是沒解決。
②后來請教其他大牛,得到了一個思路,是salt這邊沒有返回執行結果,導致jenkins這邊釋放不了;緊接著我打開了salt-minion的debug模式,看了一段時間日志,發現日志的結果是無限執行一段代碼:
得出的結論是:我發布的這個程序是不是有問題(無限執行,不退出?),然后問了開發,但是開發好像沒鳥我;后來我又想,應該不是這個問題,發布其他程序的時候也是調用各種start,應該不是這個問題。那么為啥后臺一直重復刷這些日志呢,肯定是在執行某些任務,然后我自己測試了一下,執行:
salt '*' cmd.run "start cmd"
發現后臺日志也是一直在刷,后來我漸漸明白,因為cmd這個窗口不退出的話,salt會一直去執行這個任務,不會退出,除非關掉這個cmd窗口。
③那么到底該怎么解決這個問題?我想到了用bat腳本,python腳本,在腳本中寫命令去調用這個啟動命令,然后試了bat腳本,還是不行,python的os模塊調用的也是start命令,我感覺應該也不行,也沒有試,還要安裝python;所以我直接選擇了powershell,不得不說,還是很牛逼的這個powershell.找到了powershell的官方文檔,簡單學習了一下,就把這個問題搞定了。
還有一點需要注意的是:
①saltstack操作windows可視化的時候有個問題,如果salt-minion是非手動以服務方式啟動的話,是看不到任務窗口的,都會以SYSTEM這個用戶以進程的方式在后臺運行,解決之道是將salt-minion改為手動命令行啟動。
參考文檔:http://www.mamicode.com/info-detail-1892884.html
②powershell參考文檔:technet.microsoft.com/en-us/library
pipeline中的代碼示例:
sh 'salt \'tp_inservice2\' cmd.run "start-process ZP.Crm.Task.Scheduler.Engine.exe -workingdirectory \'D:\\crmService\\ZP.Crm.Task.Scheduler.Engine1-huidu\'" shell=\'powershell\''
總結
以上是生活随笔為你收集整理的salt远程执行python脚本_SaltStack远程执行Windows job程序(黑窗口)填坑经过的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python哈夫曼树_python霍夫曼
- 下一篇: 卡在linuxctrld进系统_Linu