m5-多主机异步执行命令程序

这是一个多主机异步执行命令程序

作者介绍:

需求:

例子:
>>:run "df -h" --hosts 192.168.3.55 10.4.3.4
task id: 45334
>>: check_task 45334
>>:
注意,每执行一条命令,即立刻生成一个任务ID,不需等待结果返回,通过命令check_task TASK_ID来得到任务结果 

功能介绍:

先运行server.py,再运行client.py,

键入run ‘ls‘ --hosts 10.1.1.170 10.1.1.192run "ls" --hosts 10.1.1.170 10.1.1.192

立即返回task_id: 1515977xxx

键入check_task 1515977xxx获取命令执行结果,

如结果还未返回,则提示“正在获取结果,稍后再试。。。”

实现说明:

  • 收发消息使用rabbitmq队列存储
  • 客户端传递消息时为避免阻塞,使用了守护线程
  • 服务端连接受管主机使用了多进程,为了聚合多主机执行命令结果,使用了进程间通信

程序调试环境:

  • mac Python 3.6
  • PyCharm 2016.2
  • Rabbitmq 3.6.14

补充说明:

  • 未做异常捕获,个别情况可能不尽人意

原文地址:http://blog.51cto.com/987774031/2060939

时间: 2024-10-01 06:37:00

m5-多主机异步执行命令程序的相关文章

php异步执行其他程序

这里的"其他程序",可能是linux命令,可能是其他的php文件. 网上说法有四种.分别为: 1.通过加载页面的时候通过ajax技术异步请求服务器 2.通过popen()函数 3.通过curl扩展 4.通过fscokopen()函数 说说我的看法! 通过ajax技术 不推荐 若需要异步执行的"程序"太过于耗时,而用户此时若关闭了浏览器的话,一般如果没有做什么特殊配置或者服务器端代码没有做特殊处理的话,服务器端的代码会终止执行.这就导致了这个"程序"

Saltstack异步执行命令(十三)

Saltstack异步执行命令 salt执行命令有时候会有超时的问题,就是命令下发下去了,部分主机没有返回信息,这时候就很难判断命令或任务是否执行成功.因此,salt提供异步执行的功能,发出命令后立即返回一个jid.然后我们就可以根据这个jid来查询任务是否执行成功. 命令行实现异步 参数--async,返回job ID,根据job ID我们可以查询执行结果. salt --async '*' test.ping salt-run jobs.lookup_jid 2016111716315335

Python开发【项目】:RPC异步执行命令(RabbitMQ双向通信)

RPC异步执行命令 需求: 利用RibbitMQ进行数据交互 可以对多台服务器进行操作 执行命令后不等待命令的执行结果,而是直接让输入下一条命令,结果出来后自动打印 实现异步操作 本节涉及最多的还是rabbitmq通信原理知识,要求安装rabbitmq服务 程序用广播topic模式做更好 程序目录结构: 程序简介: # 异步rpc程序 ## 1.需求 - [ ] 利用RibbitMQ进行数据交互 - [ ] 可以对多台服务器进行操作 - [ ] 执行命令后不等待命令的执行结果,而是直接让输入下一

ssh远程登录主机sudo执行命令

zimbra_service_status() { if [ $ZIMBRA_HOST == 'mail01' ];then SERVER_NUM=$(sudo su - zimbra -c "zmcontrol  status | grep \"$SERVICE_NAME\" | grep \"Running\" -c") echo $SERVER_NUM else SERVER_NUM=$(ssh $ZIMBRA_HOST -t "

带你见证expect的强大——全程自动化执行命令

痛点: 现在有两台Linux主机A和B,如何从A主机ssh到B主机,然后在B主机上执行命令,如何使这个过程实现全程自动化?你可能会使用这种方法: ssh [email protected] "ls" 但是这种方式比较笨拙,每次都要输入密码,同时并不能执行一些复杂的逻辑或命令.那么如何实现全程自动化呢?这就要用到今天这篇文章总结的expect了. expect是什么? expect是一个免费的编程工具,用来实现自动的交互式任务,而无需人为干预.说白了,expect就是一套用来实现自动交互

python3 实现堡垒机功能(并发执行命令及上传下载文件)

转载请注明出处,欢迎提出宝贵意见,谢谢! 功能介绍: 1.主机分组 登录后显示分组主机及主机数量 选择主机组后显示该主机组下所有主机信息,主机名及IP显示输入选择:1.执行命令利用线程并发组内所有主机同时执行命令,并将结果,返回格式为:----------------------host1------------------ ----------------------host2------------------ ----------------------host3-------------

ADO.NET开发技巧(3)-执行命令初步

非常好,新兵,我们已经成功连接到了数据库,接下来,我们就可以让数据库执行我们的命令了,也就是,可以开始大干一场了.哦,当然,你还得知道如何让数据库执行命令.如果没掌握好技巧而弄巧成拙的话,异常大军会马上赶过来并杀死你的. 一旦SqlConnection类使用了open方法,那么,就代表我们已经连接到了数据库,哦,等等,这是-.异常大军!笨蛋,你连接字符串拼错了!怎么办?别慌,下士,microsoft送给我们的工具箱还没用呢,让我打开看看,哦,这是try-catch-finally.另一个是usi

批量管理服务器及执行命令

 前言:      当我们在测试或运维的时候如果想要使其多条主机同时执行相同的命令的时候,我们以前得办法是  分别登录这些主机,执行命令.如果主机多的时候,将会消耗大量的时间 ,不利于我们的批量管理. 思路:      如何通过脚本,多线程一起连接这些主机,并同时下发命令?,且可以执行多条命令,在此,我利用python 的paramiko模块实现了此简单的功能 脚本的运行环境:      python 3.0以上,(可以修改下代码,2.x也可以运行),由于paramiko模块不是python 的

远程ssh执行命令时提示找不到命令

最开始的时候碰到这种问题,是在hadoop003上配置了jdk1.8, 在hadoop002上执行ssh hadoop003 java -version提示没有命令,先ssh hadoop003然后执行java -version则没有问题后来执行分发脚本时也碰到过这种问题,如果分步执行,先ssh到主机,然后执行命令就没有问题,然而直接ssh + 主机 + 命令就会报错,百度之后发现是ssh远程执行命令时加载的环境文件是~/.bashrc.所以解决的思路就是在~/.bashrc中添加需要的环境变量