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多重继承实例
Oct 11 Python
不要用强制方法杀掉python线程
Feb 26 Python
python anaconda 安装 环境变量 升级 以及特殊库安装的方法
Jun 21 Python
Numpy中转置transpose、T和swapaxes的实例讲解
Apr 17 Python
Python 修改列表中的元素方法
Jun 26 Python
python实现列表中由数值查到索引的方法
Jun 27 Python
Python从Excel中读取日期一列的方法
Nov 28 Python
对pandas读取中文unicode的csv和添加行标题的方法详解
Dec 12 Python
python下的opencv画矩形和文字注释的实现方法
Jul 09 Python
Python logging日志模块 配置文件方式
Jul 12 Python
python 实现ping测试延迟的两种方法
Dec 10 Python
Django中的DateTimeField和DateField实现
Feb 24 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
把从SQL中取出的数据转化成XMl格式
2006/10/09 PHP
Windows中安装Apache2和PHP4权威指南
2006/11/18 PHP
追求程序速度,而不是编程的速度
2008/04/23 PHP
解析PHP中DIRECTORY_SEPARATOR,PATH_SEPARATOR两个常量的作用
2013/06/21 PHP
php通过文件流方式复制文件的方法
2015/03/13 PHP
如何利用PHP实现上传图片功能详解
2020/09/24 PHP
JS的递增/递减运算符和带操作的赋值运算符的等价式
2007/12/08 Javascript
按给定几率进行随机抽取的js代码
2010/12/28 Javascript
Notify - 基于jquery的消息通知插件
2011/10/18 Javascript
Js操作Select大全(取值、设置选中等等)
2013/10/29 Javascript
js数组去重的方法汇总
2015/07/29 Javascript
JS判断是否长按某一键的方法
2016/03/02 Javascript
JavaScript过滤字符串中的中文与空格方法汇总
2016/03/07 Javascript
原生JS实现幻灯片
2017/02/22 Javascript
Js自动截取字符串长度,添加省略号(……)的实现方法
2017/03/06 Javascript
微信小程序实现之手势锁功能实例代码
2018/07/19 Javascript
Vue-Router基础学习笔记(小结)
2018/10/15 Javascript
全面了解JavaScript的作用域链
2019/04/03 Javascript
JS异步处理的进化史深入讲解
2019/08/25 Javascript
Node.js API详解之 tty功能与用法实例分析
2020/04/27 Javascript
[33:23]Secret vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python删除过期log文件操作实例解析
2018/01/31 Python
python使用phoenixdb操作hbase的方法示例
2019/02/28 Python
python基于paramiko将文件上传到服务器代码实现
2019/07/08 Python
Python实现投影法分割图像示例(一)
2020/01/17 Python
关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)
2020/02/20 Python
Django项目uwsgi+Nginx保姆级部署教程实现
2020/04/19 Python
详解python os.path.exists判断文件或文件夹是否存在
2020/11/16 Python
html5 跨文档消息传输示例探讨
2013/04/01 HTML / CSS
HTML5组件Canvas实现图像灰度化(步骤+实例效果)
2013/04/22 HTML / CSS
用html5的canvas和JavaScript创建一个绘图程序的简单实例
2016/07/06 HTML / CSS
《自然之道》教学反思
2014/02/11 职场文书
优秀应届生求职信
2014/06/16 职场文书
社区义诊通知
2015/04/24 职场文书
商业计划书格式、范文
2019/03/21 职场文书
Nginx反向代理、重定向
2022/04/13 Servers