1. 程式人生 > >20.27分發系統介紹

20.27分發系統介紹

expect

20.27 分發系統介紹

shell項目-分發系統-expect講解

使用場景:

假如公司的業務做得越來越大,APP後端服務端所使用的編程語言是php,要想運行這個環境運行php代碼,需要搭建lamp,lnmp的環境,最後還需要把代碼上傳到服務器上面。

在平時工作中,業務不斷的叠代,有新的功能出現,這時候就需要更改代碼,一臺機器還好,甚至還可以在服務器上面更改,但是這樣不規範,若幹臺,兩三臺的量還可以接受,如果機器特別多,甚至上百臺的時候,這上百臺機器存儲的都是公司的站點。比如一個接口,APP訪問量很大,APP需要調用服務端的接口,假如這個接口需要五十臺機器去承載,那這時候就需要去搞一個分發系統了,能夠讓每天,每段時間更新的代碼,分別的分布到這五十臺機器上面去。


expect介紹

  • 可以說是一種腳本語言,它和shell比較相似,它可以實現傳輸文件,遠程執行命令(不需要輸入密碼)

  • 它其實是一種上線代碼的工具。

  • 上線:開發的代碼,發布到線上環境。


準備工作以及過程:

  • 準備一臺模板機器,這臺機器上面的代碼是最新的,準備要上線的代碼。

  • 比如準備給50臺機器上線,這50臺機器的ip地址,用戶和密碼都需要知道

  • 使用expect腳本,借助於rsync把這些代碼給推送到這50臺機器上面去。假如需要在某機器上面執行命令,還可以遠程執行這些命令。

  • 就是這樣的一個過程。


20.28 expect腳本遠程登錄


1 安裝expect

[root@centos7-01 ~]# yum install -y expect

2 編寫expect腳本

目的自動遠程登錄,並執行命令

[root@centos7-01 ~]# cd /usr/local/sbin/
 #! /usr/bin/expect
set host "192.168.189.129"
set passwd "?????"
#此處輸入你的登錄密碼.
spawn ssh root@$host
expect {
"yes/no" { send "yes\r"; exp_continue}
"password:" { send "$passwd\r" }
}
interact


腳本解釋:

set host "192.168.189.129"
set passwd "?????"
spawn ssh root@$host
遠程登錄的主機,以及密碼,set host=$host,在except裏,set設定變量
spwan後接的是系統的shell命令,ssh遠程登錄,root@$host利用root登錄進去
expect {
"yes/no" { send "yes\r"; exp_continue}
"password:" { send "$passwd\r" }
}
interact
這是核心執行語句
"yes/no"表示第一次遠程登錄192.168.189.129,會提示"yes/no"。因為第一次登錄,本機的/root/.ssh/know_hosts文件會誤認為這是一臺陌生的機器,嚴格上可能是不安全,所以會提示。
"yes/no" { send "yes\r"; exp_continue} 
expect截取系統的提示,當遇到提示"yes/no"的時候,發送yes(yes\r,\表示回車鍵), exp_continue表示繼續
"password:" { send "$passwd\r" }
expect截取系統的提示,當遇到提示"password:"的時候,把密碼(set passwd的變量)發送過去,
expect支持用戶交互
interact結束

3 添加執行權限

[root@centos7-01 sbin]# chmod a+x 1.expect

4 執行腳本

[root@centos7-01 sbin]# ./1.expect 
spawn ssh [email protected]
[email protected]'s password: 
Last login: Wed Jun  6 15:27:39 2018 from 192.168.189.1
[root@centos7-02 ~]#

5 查看ip地址

[root@centos7-02 ~]# ifconfig 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.189.129  netmask 255.255.255.0  broadcast 192.168.189.255
        inet6 fe80::b485:96d0:c537:251e  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:73:7c:4c  txqueuelen 1000  (Ethernet)
        RX packets 266  bytes 27149 (26.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 257  bytes 25678 (25.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

成功登錄192.168.189.129,主機名也變了


20.27分發系統介紹