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

作者:shichen2014 时间:2022-01-06 08:28:30 

本文实例讲述了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,工具
0
投稿

猜你喜欢

  • 定位后无法选择容器内容解决方案

    2008-07-28 13:14:00
  • Python实现单例模式的五种写法总结

    2022-09-07 08:34:11
  • 通过Python实现猜灯谜游戏的示例代码

    2022-01-10 17:49:40
  • python爬取微博评论的实例讲解

    2022-01-10 19:53:14
  • Python的@property的使用

    2021-03-27 11:02:25
  • python numpy 常用随机数的产生方法的实现

    2021-06-14 22:44:05
  • python八皇后问题的解决方法

    2022-11-04 17:48:59
  • 15行Python代码实现免费发送手机短信推送消息功能

    2023-11-01 10:20:51
  • 解决Jupyter-notebook不弹出默认浏览器的问题

    2023-01-12 23:59:37
  • CSS实现元素透明的那些事

    2009-09-07 12:22:00
  • python selenium中Excel数据维护指南

    2021-05-29 02:52:22
  • php中session_unset与session_destroy的区别分析

    2023-07-17 21:34:56
  • 如何写JS数组sort的比较函数

    2010-07-02 12:12:00
  • ASP实现最简洁的多重查询的解决方案

    2007-09-28 12:00:00
  • PyCharm安装库numpy失败问题的详细解决方法

    2023-05-18 22:45:16
  • ASP进阶教程Ⅶ:留言簿设置密码验证

    2008-10-13 09:02:00
  • Python深度学习之Pytorch初步使用

    2023-08-12 08:16:41
  • Python高阶函数、常用内置函数用法实例分析

    2023-01-24 17:36:58
  • Python利用Nagios增加微信报警通知的功能

    2021-07-15 13:48:46
  • 新手该如何学python怎么学好python?

    2022-06-20 07:33:27
  • asp之家 网络编程 m.aspxhome.com