Fabric批量远程执行操作

本文发布时间: 2019-Mar-22
最近有个需求就是要在一个集群的多个机器上运行一些命令,比如启动、停止服务,运行一些脚本收集一些数据等,于是找到了python的一个框架Fabric。Fabric是一个Python库,用于简化使用SSH的应用程序部署或系统管理任务。它提供的主要功能包括:执行本地或远程shell命令,上传/下载文件,以及其他辅助功能,如提示用户输入、中止执行等。安装在我的CentOS上,运行下面的命令就可以简单安装yum install http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpmyum install fabric.noarch测试脚本在当前目录下创建fabfile.py文件,fabric默认总是使用fabfile.py作为它的配置文件,当然也可以使用-f来指定使用的配置文件,内容如下:def hello(): print('Hello fab!')然后运行”fab hello”,可以得到如下结果Hello fab!下面看看参数怎样传递def hello(name): print 'Hello %s!'%name然后运行”fab hello:name=fab”,可以得到如下结果Hello fab!执行本地操作from fabric.api import *def test(): local('cd /tmp') local('ls -l')执行远程操作from fabric.api import *env.hosts=['kongxx@host1:22','kongxx@host2:22']env.password='Letmein'def test(): with('cd /tmp'): run('ls -l')其中env.hosts定义了要远程执行的机器列表,env.password是要登录远程机器的密码。批量远程启停服务基本命令知道咋用了,下面就看看怎样实现我需要的功能,由于我需要批量在200多台机器上批量启动服务和执行命令,所有这些机器都配置了免密码登录,这样就不需要配置env.password了机器列表文件首先准备了一个机器列表文件,比如把所有机器名写在/tmp/hosts文件中,每行一个机器名,类似如下host1host2host3...fabfile.py文件from fabric.api import *import osdef set_hosts(): f=open('/tmp/hosts', 'r') env.hosts=f.readlines() f.close()@parallel(pool_size=5)def start(): print('start service') prepare_hosts() run('/etc/init.d/myservice start')@parallel(pool_size=5)def stop(): print('stop service') prepare_hosts() run('/etc/init.d/myservice stop')@parallel(pool_size=5)def status(): print('check service status') prepare_hosts() run('/etc/init.d/myservice status')这里由于机器比较多,因此使用了“@parallel(pool_size=5)”来使fabric使用并发方式执行,当然也可以使用命令行参数指定使用并发方式“fab -P -z 5 ”。运行下面命令即可批量执行启动、停止、查询状态操作 fab set_hosts start|stop|status转载请以链接形式标明本文地址本文地址:http://blog.csdn.net/kongxx/article/details/46480579


(以上内容不代表本站观点。)
---------------------------------
本网站以及域名有仲裁协议。
本網站以及域名有仲裁協議。

2020-Jul-13 01:12am
栏目列表