Fabric批量遠端執行操作

2021-12-30 01:57:59 字數 1771 閱讀 2890

最近有個需求就是要在乙個集群的多個機器上執行一些命令,比如啟動、停止服務,執行一些指令碼收集一些資料等,於是找到了python的乙個框架fabric。fabric是乙個python庫,用於簡化使用ssh的應用程式部署或系統管理任務。

在我的centos上,執行下面的命令就可以簡單安裝

yum install

yum install fabric.noarch在當前目錄下建立fabfile.py檔案,fabric預設總是使用fabfile.py作為它的配置檔案,當然也可以使用-f來指定使用的配置檔案,內容如下:

def hello():

print("hello fab!")然後執行」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

...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批量操作遠端操作主機的練習

fabric是python的乙個基於命令列的自動化部署框架,用docker開了兩個容器來學習fabric.usr bin env python coding utf 8 from fabric.api import env.hosts root 114.215.86.228 22 root 114....

Fabric 批量安裝ZeroMQ

fabric是乙個用python開發的部署工具,最大特點是不用登入遠端伺服器,在本地執行遠端命令,幾行python指令碼就可以輕鬆部署。關於fabric的安裝可以直接參考官網的內容 fabric 官網 部署zeromq,本就是一件麻煩的事情,所以寫了乙個指令碼,用來實現多機統一部署 import s...

遠端部署神器 Fabric,支援 Python3

如果你搜一圈 fabric 關鍵字,你會發現 90 的資料都是過時的,因為現在 fabric 支援 python3,但是它又不相容舊版 fabric。所以,如果你按照那些教程去操作的話根本跑不通。如果你還沒用過 fabric,那麼這篇文章就是幫你快速上手 fabric 的。不管你現在用不用,先了解了...