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

  1. salt远程执行python脚本_SaltStack与Python配合实现系统用户自动化管理

    背景需求: 随意业务的发展,服务器数据也是越来越多,开发人员,运维人员也是越来越多.这时候如果有大量的人需要登录到服务器的话,那么我们就很有必要对用户进行管理.传统的方式是登录到每台服务器创建一个用户 ...

  2. linux定时执行python脚本_linux定时执行python脚本的方法以及失败不执行的处理方法...

    首页,linux定时任务用到的是crontab,我们来看一下crontab如何使用 crontab-1[user]-列出用户目前的crontab. crontab-e[user]-编辑用户目前的cro ...

  3. linux定时执行python脚本_ubuntu定时执行python脚本实例代码

    前言 本文将介绍ubuntu系统下如何定时执行shell脚本.python脚本,ubuntu系统有一个定时任务的管理器crontab,我们只需要编辑定时任务,然后重启定时任务服务就好了. cronta ...

  4. Windows创建定时任务执行Python脚本(py文件放在windows上定时运行)

    在windows 中如何定时运行一个python脚本? 解决方法是:使用windows 的"任务计划程序" 第一步:在 计算器右击 --> 选择管理 进入如下界面: 第二步: ...

  5. flask执行python脚本_如何从Flask应用程序执行Shell脚本

    要在Python中显示命令输出,有两种常用方法:check_output():它使用参数运行命令并返回其输出.(official documentation) subprocess.communica ...

  6. python 管理windows客户端_在远程windows客户端上执行python脚本

    我正在使用paramiko在远程windows服务器上执行命令.我能够执行dir之类的命令并提取输出,但是执行python脚本似乎失败了.不会引发错误消息.在 下面是我的代码片段:def ssh_co ...

  7. mac上使用crontab周期性执行python脚本

    这个月买了本书<Linux系统命令及Shell脚本实践指南>, 看到了一个周期性执行任务cron.顿时产生一个想法: mac上有这种机制么? 加上自己也在15年下半年也学了点python脚 ...

  8. 使用sae定时执行Python脚本

    使用sae定时执行Python脚本 使用sae定时执行Python脚本 12,May,2014 | 57 Views 毕设压力略大,必须是桂林游的锅.去之前放松了几天,回来又休闲了几天,加上桂林的一周 ...

  9. python运维脚本部署jdk_Jenkins自动执行Python脚本,并输出测试报告

    这段时间,在家时间自由(除了睡觉8小时,其他时间都在工作和学习),有大把的时间实操练习一些硬技能: 今天,更新一篇利用Jenkins这套框架,调用Python自动化脚本,并输出测试报告的手把手实操文章 ...

最新文章

  1. 饥荒海难机器人怎么用_饥荒开发商又一款神作,难到吐血的生存游戏!
  2. 图谱实战 | 安全领域知识图谱建设与典型应用场景总结
  3. linux vlc 串流_linux下VLC的安装
  4. [Linux学习笔记] Linux历史发展与应用
  5. css3响应式布局设计——回顾
  6. 数学与计算机教学设计,数学和信息技术整合的思考 教案教学设计
  7. 天燃气与电热水器哪个用着成本低?
  8. Codeforces Round #450
  9. 白话使用zookeeper作为注册中心搭建微服务
  10. LINUX SHELL中使用sed匹配某一行并替换这一行的内容
  11. 测试UDP端口连通性
  12. ant design vue 中select默认选中(V2版本)
  13. element-ui按需引入报错 Error: Cannot find module ‘babel-preset-es2015‘
  14. 幼儿园保育员好吗 就业前景如何
  15. IT行业男性出轨率最高!
  16. 思科:利用三层交换机实现vlan间路由
  17. 苹果市场占有率_快手充值快快币苹果版
  18. 科学的互联网思想 指引我国网络强国建设稳步前行
  19. 苹果库乐队怎么玩_手机版决战万圣夜游戏下载了怎么玩?(安卓/苹果)
  20. 洛谷P3400 仓鼠窝(单调栈)

热门文章

  1. SpringSecurity集中式整合之授权操作
  2. Nginx负载均衡策略之url_hash
  3. 通道Channel-使用NIO 写入数据
  4. 搭建基础架构-Page
  5. 模版设计模式概述和使用
  6. sqoop导入-hdfs
  7. 使用Actuator检查与监控
  8. CentOS系统参数优化
  9. 写csv文件_机器学习Python实践——数据导入(CSV)
  10. 斐波那契数列python递归 0、1、1、2、3_python实现斐波那契数列的多种方式