fabric是乙個用python開發的部署工具,最大特點是不用登入遠端伺服器,在本地執行遠端命令,幾行python指令碼就可以輕鬆部署。關於fabric的安裝可以直接參考官網的內容(fabric 官網)
部署zeromq,本就是一件麻煩的事情,所以寫了乙個指令碼,用來實現多機統一部署
import sys, os, time
import fabric
from fabric.api import *
netifs = {}
now = time.strftime('%y%m%d-%h%m%s', time.localtime(time.time()))
def host(str=''):
if str == '-':
list = _to_list(sys.stdin)
else:
list = str.split('\n')
env.hosts = _to_hosts(list)
env.passwords = _to_passwords(list)
print env.passwords
netifs = _to_netifs(list)
print env.hosts
def _to_list(handle):
list =
while true:
line = handle.readline().strip()
if line:
else:
return list
def _to_hosts(list):
hosts =
for line in list:
kvp = line.split('|')
return hosts
def _to_passwords(list):
passwords = {}
for line in list:
kvp = line.split('|')
passwords[kvp[1]] = kvp[2]
return passwords
def _to_netifs(list):
passwords = {}
for line in list:
kvp = line.split('|')
netifs[kvp[1]] = kvp[0]
return netifs
def rsync_zmq():
run('mkdir -p /data/soft')
put("/data1/deploy1/deploy/bandwidth/zeromq/zeromq-2.2.0.tar.gz","/data/soft/zeromq-2.2.0.tar.gz")
def rsync_jzmq():
run('mkdir -p /data/soft')
put("/data1/deploy1/deploy/bandwidth/zeromq/jzmq-2.2.2.zip","/data/soft/jzmq-2.2.2.zip")
def yum_install(name):
run('yum -y install ' + name )
def install_zmq():
run('tar -zxvf /data/soft/zeromq-2.2.0.tar.gz -c /data/soft')
with cd('/data/soft/zeromq-2.2.0'):
run('./autogen.sh')
run('./configure')
run('make install')
with cd('/data/soft/zeromq-2.2.0/perf'):
run('./inproc_lat 100 20')
def install_jzmq():
run('unzip -o -d /data/soft/ /data/soft/jzmq-2.2.2.zip')
with cd('/data/soft/jzmq-2.2.2'):
run('chmod +x autogen.sh')
run('chmod +x configure')
run('dos2unix *.sh')
run('./autogen.sh')
run('./configure -with-zeromq=/data/soft/zeromq-2.2.0')
run('make install')
run('echo -e "/usr/local/lib" >> /etc/ld.so.conf')
run('sudo ldconfig')
def install_zmq_auto():
rsync_zmq()
rsync_jzmq()
yun_install('libuuid-devel')
install_zmq()
install_jzmq()
執行方式:
echo "eth0|伺服器ip|密碼|描述資訊" | fab -f deploy host:- rsync_soft
cat server.db |fab -f zeromq.py host:- install_zmq
上面的語句可以單獨對一台機器執行相應的方法,也可以將伺服器資訊寫入檔案,統一執行
fabric提供幾個簡單的api來完成所有的部署,最常用的是local()和run(),分別在本地和遠端執行命令,put()可以把本地檔案上傳到遠端,當需要在遠端指定當前目錄時,只需用with cd('/path/to/dir/'):即可。
預設情況下,當命令執行失敗時,fabric會停止執行後續命令。有時,我們允許忽略失敗的命令繼續執行,比如run('rm /tmp/abc')在檔案不存在的時候有可能失敗,這時可以用with settings(warn_only=true):執行命令,這樣fabric只會打出警告資訊而不會中斷執行。
fabric是如何在遠端執行命令的呢?其實fabric所有操作都是基於ssh執行的,必要時它會提示輸入口令,所以非常安全。更好的辦法是在指定的部署伺服器上用證書配置無密碼的ssh連線。
Fabric批量遠端執行操作
最近有個需求就是要在乙個集群的多個機器上執行一些命令,比如啟動 停止服務,執行一些指令碼收集一些資料等,於是找到了python的乙個框架fabric。fabric是乙個python庫,用於簡化使用ssh的應用程式部署或系統管理任務。在我的centos上,執行下面的命令就可以簡單安裝 yum inst...
ubuntu 安裝 fabric 步驟
一句話 sudo apt get install fabric 以下的不用看了。我是個python 盲,近期乙個專案的部署要用到fabric,所以記錄一下步驟 1.先安裝pip 估計類似於rubygem curl o python virtualenv.py my new env 2.再安裝 fab...
ubuntu 安裝 fabric 步驟
一句話 sudo apt get install fabric 以下的不用看了。我是個python 盲,近期乙個專案的部署要用到fabric,所以記錄一下步驟 1.先安裝pip 估計類似於rubygem curl o python virtualenv.py my new env 2.再安裝 fab...