分發系統介紹、 expect腳本遠程登陸、expect腳本遠程執行命令、expect腳本傳遞參數

分發系統介紹

大多數企業都會有這樣的需求,業務稍微大一點,它都會去作一些負載均衡,也意味着你的機器有多臺,至少得兩臺,兩臺的話,你的程序是分別放在了兩臺機器上或者是多臺機器上;假如說要添加一個新的功能,或者說你的程序有一個小bug,那這個時候你若是想這個bug修復,或者說新增一個功能的話,你要去改程序,那不少企業有svn,它是一個代碼管理倉庫,那咱們若是把程序修改了以後呢,先傳一份到svn庫裏邊去;若是再智能自動化一點,我能夠從我們服務器上或者測試機上把svn庫裏的代碼直接拽過來,發佈到我們的測試機上,而後再從測試機上呢,測試完成以後沒問題了,我再把這些代碼呢再拉到我們線上的服務器上。固然,有的公司沒有那麼複雜,它可能直接從svn庫裏面把代碼直接拉到我們線上的服務器上,可是,你拉的時候呢,實際上只拉了一臺機器,假如說你負載均衡有三臺,那你這三臺其中一臺更新了,另外兩臺尚未更新,那怎麼辦呢?那這個時候你得想辦法把代碼從這臺更新的機器上分發到另外兩臺機器上去,那分發的話,能夠手動去拷貝,用rsycn;固然,也能夠從svn裏邊直接拉過去,這個操做的話可能會複雜一點,一兩臺機器無所謂,但你機器多了的話,你每臺機器都得去操做一下,很差,效率比較低,因此咱們想了一種辦法:就是在你這一臺測試機上或者是這一臺生產機器上,你去搞一個腳本,那這個腳本的目的呢,就是把這些新的代碼或者說全部的代碼同時給它同步到另外的機器上去,一鍵同步,那我們這個腳本的目的呢就是爲了同步;另外可能還有一種,我同步完成以後呢,我還要去在那臺機器上去執行一條命令,那好比我涉及到一個服務,我腳本或者說我們這個apache、ngix配置文件我更新了,我更新了一臺測試沒問題了,那另外其餘幾臺,我也要更新一下,那這個時候我更新的時候,我也是經過我們這個腳本分發,直接分發給其餘的機器,由於它們的腳本的配置都是如出一轍的,那你分發完成以後呢,是否是就意味着你的服務要重啓或者從新reload,怎麼辦?我就須要去在遠程的機器上去執行一些命令,那這個時候,我也須要同時去執行,批量執行,一臺一臺的登陸太麻煩了,很浪費時間,那我也可能經過這個腳本去實現,那今天要講的就是怎樣去實現程序或者配置文件的同步以及命令的遠程執行,那麼在這涉及到一個概念,叫作expect。shell

expect腳本遠程登陸

分發系統介紹、 expect腳本遠程登陸、expect腳本遠程執行命令、expect腳本傳遞參數

安裝expectapache

[root@100xuni1 ~]# yum install -y expect

安裝完成後寫expect的腳本,自動遠程登陸一臺機器,並執行命令vim

[root@100xuni1 sbin]# vim 1.expect
寫入一下內容:
#! /usr/bin/expect
set host "192.168.63.101"
set passwd "hanshuo"
spawn ssh root@$host
expect {
"yes/no" { send "yes\r"; exp_continue}
"assword:" { send "$passwd\r" }
}
interact

分發系統介紹、 expect腳本遠程登陸、expect腳本遠程執行命令、expect腳本傳遞參數

加個執行權限服務器

[root@100xuni1 sbin]# chmod a+x 1.expect

測試這個腳本負載均衡

[root@100xuni1 sbin]# ./1.expect

分發系統介紹、 expect腳本遠程登陸、expect腳本遠程執行命令、expect腳本傳遞參數

expect腳本遠程執行命令

分發系統介紹、 expect腳本遠程登陸、expect腳本遠程執行命令、expect腳本傳遞參數

不單單遠程登陸,我還要執行一條命令,最後在退出來ssh

[root@100xuni1 sbin]# vim 2.expect           ##編輯腳本
寫入下列內容:
#!/usr/bin/expect
set user "root"
set passwd "hanshuo"
spawn ssh $user@192.168.63.101

expect {
"yes/no" { send "yes\r"; exp_continue}
"password:" { send "$passwd\r" }
}
expect "]*"
send "touch /tmp/12.txt\r"
expect "]*"
send "echo 1212 > /tmp/12.txt\r"
expect "]*"
send "exit\r"

加個執行權限ide

[root@100xuni1 sbin]# chmod a+x 2.expect

測試這個腳本svn

[root@100xuni1 sbin]# ./2.expect

分發系統介紹、 expect腳本遠程登陸、expect腳本遠程執行命令、expect腳本傳遞參數

分發系統介紹、 expect腳本遠程登陸、expect腳本遠程執行命令、expect腳本傳遞參數

expect腳本傳遞參數

分發系統介紹、 expect腳本遠程登陸、expect腳本遠程執行命令、expect腳本傳遞參數

expect是能夠傳遞參數的就像shell的$1$2同樣測試

[root@100xuni1 sbin]# vim 3.expect    ##編輯expect
寫入如下內容:
#!/usr/bin/expect

set user [lindex $argv 0]
set host [lindex $argv 1]
set passwd "hanshuo"
set cm [lindex $argv 2]
spawn ssh $user@$host

expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect "]*"
send "$cm\r"
expect "]*"
send "exit\r"

分發系統介紹、 expect腳本遠程登陸、expect腳本遠程執行命令、expect腳本傳遞參數

加個執行權限spa

[root@100xuni1 sbin]# chmod a+x 3.expect

測試這個腳本

[root@100xuni1 sbin]# ./3.expect root 192.168.63.101 ls

分發系統介紹、 expect腳本遠程登陸、expect腳本遠程執行命令、expect腳本傳遞參數

分發系統介紹、 expect腳本遠程登陸、expect腳本遠程執行命令、expect腳本傳遞參數

分發系統介紹、 expect腳本遠程登陸、expect腳本遠程執行命令、expect腳本傳遞參數

相關文章
相關標籤/搜索