13. 自動化運維——批量關閉tomcat服務

最愛喝酸奶發表於2019-02-01

生產環境中往往在多臺機器上執行同一個服務(tomcat),本案例的需求是批量關閉這多臺機器上的tomcat服務。假設以下場景:

1)提供一個機器IP和tomcat使用者的密碼列表(/data/ip-passwd.txt),格式如下:

10.111.22.101  passwd1  
10.111.22.102  passwd2  
10.111.22.103  passwd3  
...

2)tomcat所在路徑是 /opt/tomcat/ ;

3)關閉tomcat服務的命令是 /opt/tomcat/bin/shutdown.sh ;

4)遠端機器上只有tomcat一個java應用,即程式java只是關於tomcat的。

參考指令碼如下:

#!/bin/bash
#批量關閉遠端機器上的tomcat服務

ipfile=/data/ip-passwd.txt

cat >> kill_tomcat.exp << EOF
#!/usr/bin/expect
set passwd [lindex \$argv 0]
set host [lindex \$argv 1]
spawn ssh tomcat@\$host

expect{
    "yes/no" { send "yes\r"; exp_continue}          # \r表示回車;exp_continue表示再一次互動
    "password:" { send "\$passwd\r" }
}

expect "]*"
send "/opt/tomcat/bin/shutdown.sh\r"

expect "]*"
send "if ps aux |grep -q tomcat;then killall -9 java;fi"

expect "]*"
send "exit\r"
expect eof
EOF

chmod a+x kill_tomcat.exp

cat $ipfile |while read line
do
    ip=`echo $line |awk '{print $1}'`
    pw=`echo $file |awk '{print $2}'`
    ./kill_tomcat.exp $pw $ip
done

指令碼中,

  1. expect指令碼中,set設定變數,spawn後面跟要執行的命令

  2. expect指令碼中,第一個引數用[lindex $argv 0]表示,第二個引數用[lindex $argv 1]表示,依次類推

  3. ]* 匹配 ]# 和 ]$ ,不管是root使用者還是普通使用者


相關文章