最近有個需求就是要在乙個集群的多個機器上執行一些命令,比如啟動、停止服務,執行一些指令碼收集一些資料等,於是找到了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 的。不管你現在用不用,先了解了...