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中__call__用法实例
Aug 29 Python
Python编程实现二叉树及七种遍历方法详解
Jun 02 Python
python使用json序列化datetime类型实例解析
Feb 11 Python
Python3.6简单反射操作示例
Jun 14 Python
numpy的文件存储.npy .npz 文件详解
Jul 09 Python
Tornado Web Server框架编写简易Python服务器
Jul 28 Python
Django如何将URL映射到视图
Jul 29 Python
python opencv 简单阈值算法的实现
Aug 04 Python
对Django url的几种使用方式详解
Aug 06 Python
Pytorch环境搭建与基本语法
Jun 03 Python
Python dict的常用方法示例代码
Jun 23 Python
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
Apr 06 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
phpMyAdmin 安装配置方法和问题解决
2009/06/08 PHP
php中opendir函数用法实例
2014/11/15 PHP
[原创]PHP实现SQL语句格式化功能的方法
2017/07/28 PHP
PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析
2018/04/20 PHP
关于JavaScript的gzip静态压缩方法
2007/01/05 Javascript
DOM Scripting中的图片切换[兼容Firefox]
2010/06/12 Javascript
轻量级 JS ToolTip提示效果
2010/07/20 Javascript
jquery下动态显示jqGrid以及jqGrid的属性设置容易出现问题的解决方法
2010/10/22 Javascript
你必须知道的Javascript知识点之"单线程事件驱动"的使用
2013/04/23 Javascript
深入浅析AngularJS和DataModel
2016/02/16 Javascript
JQuery实现列表中复选框全选反选功能封装(推荐)
2016/11/24 Javascript
浅谈如何通过node.js对数据进行MD5加密
2018/05/16 Javascript
Angular4.x Event (DOM事件和自定义事件详解)
2018/10/09 Javascript
Vue实现数据请求拦截
2019/10/23 Javascript
vue封装可复用组件confirm,并绑定在vue原型上的示例
2019/10/31 Javascript
vue中使用vee-validator完成表单校验方案
2019/11/01 Javascript
JS实现排行榜文字向上滚动轮播效果
2019/11/26 Javascript
Vue父组件向子组件传值以及data和props的区别详解
2020/03/02 Javascript
javascript实现数字时钟效果
2021/02/06 Javascript
Python实现二分法算法实例
2015/02/02 Python
深入解析Python中的上下文管理器
2016/06/28 Python
PyQt5实现五子棋游戏(人机对弈)
2020/03/24 Python
python实现LBP方法提取图像纹理特征实现分类的步骤
2019/07/11 Python
Python获取统计自己的qq群成员信息的方法
2019/11/15 Python
Python2与Python3的区别点整理
2019/12/12 Python
基于Tensorflow使用CPU而不用GPU问题的解决
2020/02/07 Python
Python自定义sorted排序实现方法详解
2020/09/18 Python
英国时尚家具、家居饰品及礼品商店:Graham & Green
2016/09/15 全球购物
Net Remoting把服务器端激活两种模式
2014/01/22 面试题
集团薪酬管理制度
2014/01/13 职场文书
运动会横幅标语
2014/06/17 职场文书
2014年教研组工作总结
2014/11/26 职场文书
追讨欠款律师函
2015/06/24 职场文书
使用Canvas绘制一个游戏人物属性图
2022/03/25 Javascript
动画《新网球王子 U-17 WORLD CUP》希腊队PV公开
2022/04/02 日漫
python playwrigh框架入门安装使用
2022/07/23 Python