近期接到领导通知,要将公司内的所有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程序(黑窗口)填坑经过的更多相关文章

  1. Saltstack远程执行(四)

    Saltstack远程执行 语法例:salt '*' cmd.run 'w' -  命令:salt -  目标:'*' -  模块:cmd.run,自带150+模块,也可以自己写模块 -  返回:执行 ...

  2. Linux远程执行Windows机器任务

    Linux远程执行Windows机器任务     近期测试人员提出需求需要在Linux下调用Windows系统下的cmd的命令完成自动构建和测试并生成测试报告. 环境: Windows Server2 ...

  3. Linux centosVMware 自动化运维认识自动化运维、启动salt相关服务、saltstack配置认证、salt-key命令用法、saltstack远程执行命令、saltstack - grains、saltstack – pillar

    一.认识自动化运维 传统运维效率低,大多工作人为完成 传统运维工作繁琐,容易出错 传统运维每日重复做相同的事情 传统运维没有标准化流程 传统运维的脚本繁多,不能方便管理 自动化运维就是要解决上面所有问 ...

  4. 远程登录 Windows server 2008 黑屏

    scenerio:  远程登录 Windows server 2008 黑屏,别人那里一切正常. Solution:在黑屏界面,点击桌面,按住Ctrl+Alt+End键 -> Log Off. ...

  5. 2、自动化运维之SaltStack远程执行详解

    SaltStack远程执行详解 ●目标(Targeting) ●模块(Module) ●返回(Returnners) 混合模式-C 选项 主机名设置参照: redis-node1-redis03-id ...

  6. 批量远程执行linux服务器程序--基于paramiko(多线程版)

    批量远程执行linux服务器程序--基于paramiko paramiko模块是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接 具体安装方法这里不写,网 ...

  7. SaltStack远程执行-返回MySQL

    上一篇:SaltStack远程执行-模块 参考官方文档:https://docs.saltstack.com/en/latest/ref/returners/all/salt.returners.my ...

  8. SaltStack入门篇(四)之深入理解SaltStack远程执行

    1.目标 2.执行模块 3.返回 salt ‘*’ cmd.run ‘uptime’ 命令 目标 执行模块 执行模块参数 1.SlatStack远程执行–目标 执行目标:https://docs.sa ...

  9. saltstack远程执行命令.md

    saltstack 支持在master上向client 远程执行命令,并显示命令执行的结果 命令格式: salt '<操作目标>' <方法> [参数] 示例 示例1 ping检 ...

随机推荐

  1. 谈谈E语言

    基于中国文化底蕴的编程语言,  绝对不是E语言那个样子. 基于中文的编程,必将是计算机届的一次原子爆炸!

  2. Beaglebone Black的引脚分配

    转自:http://blog.csdn.net/daxueba/article/details/50998000 Beaglebone Black的引脚分配 绝大多数的微型开发平台都提供了一些称为GP ...

  3. idea中选中了一个变量名,会高亮显示位于别的地方的这个变量名,那么怎么修改其他地方的高亮颜色

  4. 批量调用百度地图API获取地址经纬度坐标

    1 申请密匙 注册百度地图API:http://lbsyun.baidu.com/index.php?title=webapi 点击左侧 “获取密匙” ,经过填写个人信息.邮箱注册等,成功之后在开放平 ...

  5. 基于NEO4J的高级检索功能

    基于NEO4J的高级检索 一.需求 二.创建索引 1.索引自动更新配置 2.执行带有索引自动更新配置的过程 三.查询索引 1.LUCENE查询语法 2.实现高级检索的核心:LUCENE QUERY语句 ...

  6. finalize的作用

    1. finalize的作用 finalize()是Object的protected方法,子类可以覆盖该方法以实现资源清理工作,GC在回收对象之前调用该方法. finalize()与C++中的析构函数 ...

  7. vue axios简单配置

    参考:https://www.cnblogs.com/sophie_wang/p/7844119.html 1. 安装 npm install axios 2. main.js import axio ...

  8. jdbc加载驱动方法

    1.Class.forName("com.mysql.jdbc.Driver"); 2. DriverManager.registerDriver(new com.mysql.jd ...

  9. linux zip,tar压缩文件夹 忽略 .git 文件夾

    linux zip 忽略 .git 文件夾 # zip 命令 zip -r bitvolution.zip bitvolution -x *.git* # tar命令压缩文件夹忽略 .git文件夹 t ...

  10. [JZOJ6272] 2019.8.4【NOIP提高组A】整除

    题目 题目大意 求方程\((x^m-x)\mod n=0\)在整数范围\([1,n]\)的解的个数. \(n=\sum_{i=1}^{c}p_i\) 给出\(c\)和\(p_i\) 思考历程 作为数论 ...