近期接到领导通知,要将公司内的所有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. hdu多校第八场 1011 (hdu6667) Roundgod and Milk Tea 二分图匹配

    题意: 有若干个班,每个班有些人要喝奶茶,也提供一些奶茶,一人喝一杯,但是自己班的人不能喝自己班的奶茶,求最多能有多少人喝上奶茶. 题解: 典型的二分图匹配问题,学生在左,奶茶在右,学生和非自己班的奶 ...

  2. Dll注入技术之APC注入

    APC注入的原理是利用当线程被唤醒时APC中的注册函数会被执行的机制,并以此去执行我们的DLL加载代码,进而完成DLL注入的目的,其具体流程如下:     1)当EXE里某个线程执行到SleepEx( ...

  3. Mybatis笔记 - Mapper动态代理

    使用Mybatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper接口开发方法. Mapper接口开发方式是基于入门程序的基础上,对 控制程序 进行分层开发,程序员只需要 编写mappe ...

  4. 基于Netty的RPC架构学习笔记(五):netty线程模型源码分析(二)

    文章目录 小技巧(如何看开源框架的源码) 源码解析 阅读源码技巧 打印查看 通过打断点调试 查看调用栈 小技巧(如何看开源框架的源码) 一断点 二打印 三看调用栈 四搜索 源码解析 //设置nioso ...

  5. 来个我一起学习Python把!!!(新手共同努力)

    <初识Python> 大家好,让我们一起来学习Python,因本人也是个新手但我会把我所学的东西分享出来,并记录自己的经验学习过程,不单单是分享代码,会详细的讲解,如有错误地方希望大家指点 ...

  6. WebApi 路由机制剖析

    阅读目录 一.MVC和WebApi路由机制比较 1.MVC里面的路由 2.WebApi里面的路由 二.WebApi路由基础 1.默认路由 2.自定义路由 3.路由原理 三.WebApi路由过程 1.根 ...

  7. 2019-8-31-dotnet-判断程序当前使用管理员运行降低权使用普通权限运行

    title author date CreateTime categories dotnet 判断程序当前使用管理员运行降低权使用普通权限运行 lindexi 2019-08-31 16:55:58 ...

  8. 百度开平台BAE搭建网站

    百度开平台BAE搭建网站 一.注册:在百度云注册账号,并且登陆 然后实名验证 二.开始搭建 三.部署项目:我们来把我们的项目提交上去 填写百度云的账号密码 四.删除:删除部署项目 以上就是百度开平台B ...

  9. 多个for循环使用

    for循环 例子 语法 vue.js的for循环 <div id="myfor"><li v-for="student in studentList&q ...

  10. Leetcode211. Add and Search Word - Data structure design 添加与搜索单词 - 数据结构设计

    设计一个支持以下两种操作的数据结构: void addWord(word) bool search(word) search(word) 可以搜索文字或正则表达式字符串,字符串只包含字母 . 或 a- ...