使用shell命令進行復雜的運維時,代碼往往變得復雜難懂,而使用python腳本語言來編寫運維程序,就相當於開發普通的應用一樣,所以維護和擴展都比較簡單,更重要的是python運維工具fabric能自動登錄其他服務器進行各種操作,這種實現使用shell是很難做到的,但是使用fabric實現就很簡單,所以對於程序員的日常運維部署,建議使用python編寫腳本
Linux下默認有python環境,安裝fabric有兩種方式一種是pip直接安裝,另外一種是下載fabric源碼,使用setuptools工具執行setup.py安裝,兩種方式都需要聯網,基本上差不多,這里使用pip進行安裝,安裝的時候如果報錯,一般是因為python-devel模塊沒有安裝,需要進行安裝,可以提前使用 rpm -qa | grep python-devel 查看是否安裝python-devel,如果沒有安裝,使用yum安裝如下:
yum -y install python-devel
pip安裝之前說過,首先下載py文件:https://bootstrap.pypa.io/get-pip.py,上傳至服務器之后執行: python get-pip.py 安裝pip即可
使用pip安裝fabric: pip install fabric 稍等一會就安裝完畢了,這時輸入 fab 就會彈出對應的選項
接下來編寫一個簡單的python腳本fabrictest.py來做測試:
1 #!/usr/bin/python 2 # -*- coding:utf-8 -*- 3 4 from fabric.api import * 5 6 # 設置服務器登錄參數 7 env.roledefs = { 8 # 操作一致的放一組,一組執行同一個操作 9 'servers1':['root@linux2:22',], 10 # 第二組 11 'servers2':['root@linux3:22',] 12 } 13 14 # 本機操作 15 def localtask(): 16 local('/usr/local/nginx/nginx') 17 18 # servers1服務器組操作 19 @roles('servers1') 20 def task1(): 21 run('/usr/local/tomcat/bin/startup.sh') 22 23 # servers2 服務器組操作 24 @roles('servers2') 25 def task2(): 26 run('/usr/local/tomcat/bin/startup.sh') 27 28 # 執行任務 29 def doworks(): 30 execute(localtask) 31 execute(task1) 32 execute(task2)
以上代碼,就是簡單的在本地啟動nginx服務器,在linux1和linux2上啟動了tomcat服務器,為了接受nginx服務器的代理,這里專門使用分組的方式為了適應機器比較多的集群的需要,另外這里沒有設置服務器的密碼,一是為了服務器的安全;另外集群間建議設置ssh免密登錄,腳本就不用設置密碼了,方法doworks執行的就是最終匯總的任務,保存之后,開始執行:
fab -f fabrictest.py doworks
執行之后,腳本會自動的依次執行指定的命令,從控制台可以看到輸出,也可以在程序適當位置添加輸出,打印一些必要信息
到這里,就看到fabric這個工具的功能確實很強大,更多的編程接口可以查看官網網站的文檔:http://www.fabfile.org/
離線安裝的話在fabfile官網有指向python官網的鏈接,地址是:https://pypi.python.org/pypi/Fabric,進入頁面后可以看到很多版本的下載鏈接,首先保證安裝setuptools,下載之后解壓釋放,進入目錄后執行: python setup.py install 安裝期間需要一些依賴,比如paramiko,如果系統沒有安裝,這時候會自動聯網下載安裝,如果操作系統已經有相應的依賴,則直接離線安裝成功