共计 1976 个字符,预计需要花费 5 分钟才能阅读完成。
最近有个需求就是要在一个集群的多个机器上运行一些命令,比如启动、停止服务,运行一些脚本收集一些数据等,于是找到了 Python 的一个框架 Fabric。Fabric 是一个 Python 库,用于简化使用 SSH 的应用程序部署或系统管理任务。
它提供的主要功能包括:执行本地或远程 shell 命令,上传 / 下载文件,以及其他辅助功能,如提示用户输入、中止执行等。
安装
在我的 CentOS 上,运行下面的命令就可以简单安装
yum install http://mirrors.ustc.edu.cn/Fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum install fabric.noarch
测试脚本
在当前目录下创建 fabfile.py 文件,fabric 默认总是使用 fabfile.py 作为它的配置文件,当然也可以使用 - f 来指定使用的配置文件,内容如下:
def hello():
print(“Hello fab!”)1
然后运行”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 文件中,每行一个机器名,类似如下
host1
host2
host3
…1
fabfile.py 文件
from fabric.api import *
import os
def 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
Fabric 自动化运维工具实现远程 SSH 部署及系统管理 http://www.linuxidc.com/Linux/2015-02/112692.htm
使用 Fabric 部署网站应用 http://www.linuxidc.com/Linux/2014-11/108820.htm
使用 Vagrant 和 Fabric 用于集成测试 http://www.linuxidc.com/Linux/2014-07/104113.htm
Fabric:Python 远程部署工具 http://www.linuxidc.com/Linux/2014-05/101616.htm
CentOS/Ubuntu 下安装 Python-Pip 和 Fabric http://www.linuxidc.com/Linux/2014-11/108811.htm
本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-06/118885.htm