linux批量部署war工具,Linux 批量一键部署工具 Expect
Linux 批量一鍵部署工具 Expect
既然沒有遇到過,做好準(zhǔn)備總是好的。這是自己送給自己的話,現(xiàn)在運維做自動話越來越多,自己就學(xué)以下,記錄筆記。目前主流的有puppet、Expect、pssh等等,今天就用Expect做自動部署和日常管理維護。
一、Expect簡介
expect是一種能夠按照腳本內(nèi)容里面設(shè)定的方式與交互式程序進行“會話”的程序。根據(jù)腳本內(nèi)容,Expect可以知道程序會提示或反饋什么內(nèi)容以及什么是正確的應(yīng)答。它是一種可以提供“分支和嵌套結(jié)構(gòu)”來引導(dǎo)程序流程的解釋型腳本語言。
我們熟知的shell編程功能雖然很強大,但是不能實現(xiàn)有交互功能的多機器之前的操作,例如ssh和scp等。而expect可以幫助我們來實現(xiàn)。
二、安裝
[root@Server ~]# yum -y install expect
三、Expect使用
這里使用Expect批量管理和部署服務(wù)器大致分為兩個步驟,使用for循環(huán)讀取服務(wù)器IP、密碼列表并取值,遠程執(zhí)行命令。如下需求,在兩臺服務(wù)器上執(zhí)行自己命令mkdir /tmp/`date +%Y%m%d`,看下面實現(xiàn)方法。
首先定義一個expect登錄腳本:
1、login.exp,內(nèi)容如下:
[root@Server ~]# vi /data/sh/login.exp
#!/usr/bin/expect -f
set ip [lindex $argv 0 ]#讀取ip
set passwd [lindex $argv 1 ]#讀取密碼
set command [lindex $argv 2]#命令
set timeout 10#登錄后下次執(zhí)行命令間隔
spawn ssh root@$ip#spawn ??意思是執(zhí)行命令,expect內(nèi)命令,shell中不存在
expect {
"yes/no" { send "yes\r";exp_continue }#選擇yes
"password:" { send "$passwd\r" }#讀取
}
expect "*#*" { send "$command\r" }#執(zhí)行命令
expect eof
2、創(chuàng)建批量執(zhí)行腳本auto_exec.sh
[root@Server ~]# vi auto_exec.sh
#!/bin/sh
CMD="$*"
for i in `awk '{print $1}' passwd.txt`#fou循環(huán)讀取ip
do
j=`awk -v I="$i" '{if(I==$1)print $2}' passwd.txt`#密碼
expect /data/sh/login.exp $i $j "$CMD"#執(zhí)行
done
3、建立批量IP、密碼文件
[root@Server ~]# vi passwd.txt
192.168.17.135 123456
192.168.17.128 123456
192.168.17.136 123456
四、測試腳本
直接執(zhí)行:
[root@Server ~]# /bin/sh auto_exec.sh "mkdir -p /tmp/`date +%Y%m%d`"
登錄三臺服務(wù)器在/tmp下有日期文件
五、SCP遠程拷貝
如果需要遠程推送文件,重新建立文件login.scp相關(guān)參數(shù)和auto_exec.sh變量:
1、login.scp內(nèi)容如下:
[root@Server ~]# vi login.scp
#!/usr/bin/expect -f
set ip [lindex $argv 0 ]
set passwd [lindex $argv 1 ]
set src_file [lindex $argv 2]
set des_dir [lindex $argv 3]
set timeout 1
spawn scp -r $src_file root@$ip:$des_dir
expect {
"yes/no" { send "yes\r";exp_continue }
"password:" { send "$passwd\r" }
}
expect "#*"
expect eof
2、auto_exec.sh腳本內(nèi)容如下:
[root@Server ~]# vi auto_exec.sh
#!/bin/sh
read -p "Please Enter insert Source File or DIR: " src_file
echo ======================================================
sleep 1
read -p "Please Enter insert Destination DIR: " des_dir
for i in `awk '{print $1}' passwd.txt`
do
j=`awk -v I="$i" '{if(I==$1)print $2}' passwd.txt`
expect login.scp $i $j $src_file $des_dir
done
密碼保持不變即可。
[root@Server ~]# /bin/sh auto_exec.sh
Please Enter insert Source File or DIR: login.scp#本地文件
======================================================
Please Enter insert Destination DIR: /home
spawn scp -r login.scp root@192.168.17.135:/home#發(fā)送到客戶端的文件
六、一鍵安裝expect、scp批量auto_exec.sh腳本:
#!/bin/sh
if
[ ! -e /usr/bin/expect ];then
yum install expect -y
fi
#Judge passwd.txt exist
if
[ ! -e ./passwd.txt ];then
echo -e "The passwd.txt is not exist......Please touch ./passwd.txt ,Content Example:\n192.168.1.11 passwd1\n192.168.1.12 passwd2"
sleep 2 &&exit 0
fi
#Auto Tuoch login.exp File
cat >login.exp <
就是以上幾個腳本的合成。
以下是expect用法
1. [#!/usr/bin/expect]
這一行告訴操作系統(tǒng)腳本里的代碼使用那一個shell來執(zhí)行。這里的expect其實和linux下的bash、windows下的cmd是一類東西。
注意:這一行需要在腳本的第一行。
2. [set timeout 30]
基本上認識英文的都知道這是設(shè)置超時時間的,現(xiàn)在你只要記住他的計時單位是:秒 。timeout -1 為永不超時
3. [spawn ssh -l username 192.168.1.1]
spawn是進入expect環(huán)境后才可以執(zhí)行的expect內(nèi)部命令,如果沒有裝expect或者直接在默認的SHELL下執(zhí)行是找不到spawn命令的。所以不要用 “which spawn“之類的命令去找spawn命令。好比windows里的dir就是一個內(nèi)部命令,這個命令由shell自帶,你無法找到一個dir.com 或 dir.exe 的可執(zhí)行文件。
它主要的功能是給ssh運行進程加個殼,用來傳遞交互指令。
4. [expect "password:"]
這里的expect也是expect的一個內(nèi)部命令,有點暈吧,expect的shell命令和內(nèi)部命令是一樣的,但不是一個功能,習(xí)慣就好了。這個命令的意思是判斷上次輸出結(jié)果里是否包含“password:”的字符串,如果有則立即返回,否則就等待一段時間后返回,這里等待時長就是前面設(shè)置的30秒
5. [send "ispass\r"]
這里就是執(zhí)行交互動作,與手工輸入密碼的動作等效。
溫馨提示: 命令字符串結(jié)尾別忘記加上“\r”,如果出現(xiàn)異常等待的狀態(tài)可以核查一下。
6. [interact]
執(zhí)行完成后保持交互狀態(tài),把控制權(quán)交給控制臺,這個時候就可以手工操作了。如果沒有這一句登錄完成后會退出,而不是留在遠程終端上。如果你只是登錄過去執(zhí)行
7.$argv 參數(shù)數(shù)組
expect腳本可以接受從bash傳遞過來的參數(shù).可以使用[lindex $argv n]獲得,n從0開始,分別表示第一個,第二個,第三個....參數(shù)
總結(jié)
以上是生活随笔為你收集整理的linux批量部署war工具,Linux 批量一键部署工具 Expect的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux下qt环境的运行,在Linux
- 下一篇: 本科计算机专业在车辆段,机电与轨道车辆工