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\''
SaltStack远程执行Windows job程序(黑窗口)填坑经过的更多相关文章
- Saltstack远程执行(四)
Saltstack远程执行 语法例:salt '*' cmd.run 'w' - 命令:salt - 目标:'*' - 模块:cmd.run,自带150+模块,也可以自己写模块 - 返回:执行 ...
- Linux远程执行Windows机器任务
Linux远程执行Windows机器任务 近期测试人员提出需求需要在Linux下调用Windows系统下的cmd的命令完成自动构建和测试并生成测试报告. 环境: Windows Server2 ...
- Linux centosVMware 自动化运维认识自动化运维、启动salt相关服务、saltstack配置认证、salt-key命令用法、saltstack远程执行命令、saltstack - grains、saltstack – pillar
一.认识自动化运维 传统运维效率低,大多工作人为完成 传统运维工作繁琐,容易出错 传统运维每日重复做相同的事情 传统运维没有标准化流程 传统运维的脚本繁多,不能方便管理 自动化运维就是要解决上面所有问 ...
- 远程登录 Windows server 2008 黑屏
scenerio: 远程登录 Windows server 2008 黑屏,别人那里一切正常. Solution:在黑屏界面,点击桌面,按住Ctrl+Alt+End键 -> Log Off. ...
- 2、自动化运维之SaltStack远程执行详解
SaltStack远程执行详解 ●目标(Targeting) ●模块(Module) ●返回(Returnners) 混合模式-C 选项 主机名设置参照: redis-node1-redis03-id ...
- 批量远程执行linux服务器程序--基于paramiko(多线程版)
批量远程执行linux服务器程序--基于paramiko paramiko模块是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接 具体安装方法这里不写,网 ...
- SaltStack远程执行-返回MySQL
上一篇:SaltStack远程执行-模块 参考官方文档:https://docs.saltstack.com/en/latest/ref/returners/all/salt.returners.my ...
- SaltStack入门篇(四)之深入理解SaltStack远程执行
1.目标 2.执行模块 3.返回 salt ‘*’ cmd.run ‘uptime’ 命令 目标 执行模块 执行模块参数 1.SlatStack远程执行–目标 执行目标:https://docs.sa ...
- saltstack远程执行命令.md
saltstack 支持在master上向client 远程执行命令,并显示命令执行的结果 命令格式: salt '<操作目标>' <方法> [参数] 示例 示例1 ping检 ...
随机推荐
- hexo换了电脑,怎么办?
个人博客:https://mmmmmm.me 源码:https://github.com/dataiyangu/dataiyangu.github.io 背景: 今天公司的苹果电脑硬件升级,之前看过h ...
- java时间工具类,时间相互转换
/* * @author XueWeiWei * @date 2019/8/26 16:22 */ package com.nps.utils; import java.text.ParseExcep ...
- 如何把本地文件上传github
1.$ git config --global user.name "xxx" 2.$ git config --global user.email xxx@qq.com 3.进入 ...
- Linux上 安装Sorl4.7 中间件用tomcat
最近需要用到solr,公司内部搭建了一个solr测试环境. 版本:solr4.7.2 ,tomcat 7.0.55 jdk:1.7_051 解压 solr 和tomcat 这里就不详说. 1.启动t ...
- Yii2 在php 7.2环境下运行,提示 Cannot use ‘Object’ as class name
出错原因是: Object是php7.2中的保留类名,不可以使用Object作为类的名称. The object name was previously soft-reserved in PHP 7. ...
- ac与ap同步分析
1 ApStatusRequest : ap把自己的状态发过来做请求 就相当于自我介绍 网关上抓包 : tcpdump -ni br-lan tcp port 8090 -Avv / -w po ...
- String str = new String("abc"),这段代码一共生成了几个String对象?为什么?
String str = new String("abc")创建了俩个对象,首先为创建一个String对象"abc",然后在调用String类的构造方法时 pu ...
- leetcode-63-不同路径②
题目描述: 第一次提交: class Solution: def uniquePathsWithObstacles(self, obstacleGrid) : m = len(obstacleGrid ...
- mysql清除主从复制关系
mysql清除主从复制关系 网页转自https://www.cnblogs.com/wjoyxt/p/5343662.html mysql主从复制中,需要将主从复制关系清除,需要取消其从库角色.这可通 ...
- 最大流拆点——poj3281
/* 因为牛的容量为1,把牛拆点 按照s->f->cow->cow->d->t建图 */ #include<iostream> #include<cst ...