Python的批量远程管理和部署工具Fabric用法实例


Posted in Python onJanuary 23, 2015

本文实例讲述了Python的批量远程管理和部署工具Fabric用法。分享给大家供大家参考。具体如下:

Fabric是Python中一个非常强大的批量远程管理和部署工具,常用于在多个远程PC上批量执行SSH任务.

常见的使用方法大概总结如下:

1. 首先,要将批量执行的任务写入到一个fabfile.py中,

# -*- coding:utf-8 -*-  

  

from fabric.api import run, local, roles, env, cd  

env.hosts=[  

    '192.168.1.110',  

    '192.168.1.111',  

    '192.168.1.112'  

]  

env.user="username"  

env.password="password"  

env.port=22  

#env.parallel=True  

#env.skip_bad_hosts=True  

#env.timeout=1  

#env.warn_only=True  

  

# local用于在本地PC执行命令.  

# run用于在远程PC执行命令.  

def ls():  

    with cd('/home/workspace/project'):  

        local('touch 1.log')  

    with cd('/home/workspace/project2'):  

        local('touch 2.log')   

  

#@parallel, 可以设置是否并行执行  

#@serial  

def pull():  

    with cd('/home/workspace/project'):  

        run('git pull')  

  

def clean():  

    with cd('/home/workspace/project'):  

        run('bash clean.sh')  

 

@hosts('192.168.1.113')  

def robot(device):  

    with cd('/home/workspace/project'):  

        run('bash run.sh %s robot && sleep 1' % device)

以上就是一个简单的fabfile.py, 其中定义的函数均对应一个fab中的可执行命令.
其中有两个小的注意事项:

A.在远程机器的run.sh中如果要执行一些非系统常见的工具,最好指定为绝对路径. 且可以适当地使用nohup的方式.

B.执行其他脚本或者命令后最好加上sleep,以防止Fabric过早地关闭与远程PC连接的session,而导致执行任务失败.

2. 执行过程: fabric执行会默认选取当前目录下的fabfile.py文件,

fab clean

fab pull

fab robot:hosts="192.168.1.115",device=5560

可以通过hosts参数给fabric传入指定的远程PC, 该hosts参数的优先级比env.hosts的要高.

也可以给fab中的命令传递参数,如device.

此外,还可以通过fab -f otherFabFile.py clean来指定其他的fabric文件.

如果需要并行执行的话,也可以传递参数如fab -P -z 15 pull, 15表示并行执行的PC数量.

以上,只是一些简单的用法,如果需要更高级的用法,可以关注该项目的github主页 https://github.com/fabric/fabric.

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
Python实现提取谷歌音乐搜索结果的方法
Jul 10 Python
Pycharm学习教程(2) 代码风格
May 02 Python
Python之web模板应用
Dec 26 Python
Python操作mongodb数据库的方法详解
Dec 08 Python
python接口自动化测试之接口数据依赖的实现方法
Apr 26 Python
Python对HTML转义字符进行反转义的实现方法
Apr 28 Python
Python定时任务工具之APScheduler使用方式
Jul 24 Python
Django Python 获取请求头信息Content-Range的方法
Aug 06 Python
python多继承(钻石继承)问题和解决方法简单示例
Oct 21 Python
python实现小世界网络生成
Nov 21 Python
python tkinter实现定时关机
Apr 21 Python
python爬取网页版QQ空间,生成各类图表
Jun 02 Python
推荐11个实用Python库
Jan 23 #Python
17个Python小技巧分享
Jan 23 #Python
Windows8下安装Python的BeautifulSoup
Jan 22 #Python
Python实现抓取百度搜索结果页的网站标题信息
Jan 22 #Python
Python中使用异常处理来判断运行的操作系统平台方法
Jan 22 #Python
Python实现把utf-8格式的文件转换成gbk格式的文件
Jan 22 #Python
python中实现php的var_dump函数功能
Jan 21 #Python
You might like
PHP:风雨欲来 路在何方?
2006/10/09 PHP
MySQL中create table语句的基本语法是
2007/01/15 PHP
抛弃 PHP 代价太高
2016/04/26 PHP
数组方法解决JS字符串连接性能问题有争议
2011/01/12 Javascript
chrome下img加载对height()的影响示例探讨
2014/05/26 Javascript
Jquery Ajax xmlhttp请求成功问题
2015/02/04 Javascript
javascript中clipboardData对象用法详解
2015/05/13 Javascript
JavaScript学习小结(7)之JS RegExp
2015/11/29 Javascript
AngualrJS中每次$http请求时的一个遮罩层Directive
2016/01/26 Javascript
JavaScript代码因逗号不规范导致IE不兼容的问题
2016/02/25 Javascript
jqueryMobile 动态添加元素,展示刷新视图的实现方法
2016/05/28 Javascript
微信小程序 vidao实现视频播放和弹幕的功能
2016/11/02 Javascript
老生常谈的跨域处理
2017/01/11 Javascript
详解Angular2响应式表单
2017/06/14 Javascript
js实现canvas保存图片为png格式并下载到本地的方法
2017/08/31 Javascript
分享vue.js devtools遇到一系列问题
2017/10/24 Javascript
vue中tab选项卡的实现思路
2018/11/25 Javascript
微信小程序开发(二):页面跳转并传参操作示例
2020/06/01 Javascript
解决ant Design中Select设置initialValue时的大坑
2020/10/29 Javascript
[03:49]辉夜杯现场龙骑士COSER秀情商“我喜欢芬队!”
2015/12/27 DOTA
初步解析Python下的多进程编程
2015/04/28 Python
python线程中同步锁详解
2018/04/27 Python
Python使用Selenium爬取淘宝异步加载的数据方法
2018/12/17 Python
django富文本编辑器的实现示例
2019/04/10 Python
关于PyTorch 自动求导机制详解
2019/08/18 Python
python爬虫调度器用法及实例代码
2020/11/30 Python
html5如何及时更新缓存文件(js、css或图片)
2013/06/24 HTML / CSS
英国最大的在线时尚眼镜店:Eyewearbrands
2019/03/12 全球购物
Feelunique德国官方网站:欧洲最大的在线美容零售商
2019/07/20 全球购物
大三自我鉴定范文
2013/10/05 职场文书
大学生专科学习生活的自我评价
2013/12/07 职场文书
校长就职演讲稿
2014/01/06 职场文书
知识就是力量演讲稿
2014/09/13 职场文书
以权谋私检举信范文
2015/03/02 职场文书
《丑小鸭》教学反思
2016/02/19 职场文书
上个世纪50年代的可穿戴技术:无线电帽子
2022/02/18 无线电