您的位置:首页 > 运维架构 > Tomcat

案例十六、自动化运维-批量关Tomcat服务

2019-08-18 14:49 1331 查看

生产环境中往往在多台机器上运行同一个服务(Tomcat),此案例的需求是批量地关闭多台机器上的Tomcat服务。假设场景:

1)提供一个机器IP和Tomcat用户的密码列表(/data/ip-passwd.txt),格式如下:

10.111.222.101 passwd1

10.111.222.102 passwd2

10.111.222.103 passwd3

......

2)Tomcat所在路径:/opt/tomcat/

3)关闭Tomcat服务的命令:/opt/tomcat/bin/shutdown.sh

4)远程机器上只有tomcat一个Java应用,即进程Java只是关于Tomcat的


知识点一:expect脚本登录远程机器

expect是Unix/Linux系统中用来进行自动化控制和测试的软件工具,它是Tcl脚本语言的一个扩展,应用在交互式软件中,如telnet,ftp,ssh,rsync等。下面是用expect脚本登录远程机器的示例:

#!/usr/bin/expect
#定义变量
set passwd "123abc321"
#执行命令
spawn ssh root@192.168.10.11
#与远程机器交互 截取特定信息 发送变量
expect {
"yes/no" { send "yes\r";exp_continue }
"password:" { send "$passwd\r" }
}
interact

说明:set为设置变量的指令,passwd为变量名,后面是变量的值。spawn后面为要执行的shell命令(比如ssh、rsync等)。expect{ }里为交互过程,首次ssh登录一台机器时,会问我们是否继续登录,expect会传递一个yes指令,并且回车(\r),之后再一次交互(exp_continue),然后就会提示我们输入该主机的密码,expect会把$passwd传递给它,然后就能正常登录该主机了。expect{ }里面,只需要写局部关键词即可,例如本例中只写了“password:”。最后一行interact的作用是,登录主机后停留在远程的机器上,而不退出。


知识点二:expect脚本登录远程机器并执行命令

登录机器后,还可以在远程的机器上执行命令,示例:

#!/usr/bin/expect
set host "192.168.80.102"
set passwd "aaa123bbb"
spawn ssh user1@$host
expect {
"yes/no" {send "yes\r";exp_continue}
"password:" {send "$passwd\r"}
}
expect "]*"
send "touch /tmp/test.aa\r"
expect "]*"
send "echo 111 >/tmp/test.aa\r"
expect "]*"
send "exit\r"

说明:这里的']*'包含了']#'或者']$',这样不管是root用户还是普通用户,都可以匹配到。


知识点三:给expect脚本传递参数

expect脚本可以像shell脚本那样接收外部传递的参数,在shell中用$1表示第一个参数,$2表示第二个参数,以此类推。但在expect脚本中,有所不同,示例:

#!/usr/bin/expect
set host [lindex $argv 0]
set passwd [lindex $argv 1]
spawn ssh root@$host
expect {
    "yes/no" {send "yes\r"}
    "password:" {send "$passwd\r"}
}
interact

说明:expect的第一个参数用[lindex $argv 0]表示,第二个参数用[lindex $argv 1]表示,以此类推。


本案例参考脚本

#!/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}
     "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"
EOF
chmod a+x kill_tomcat.exp
cat $ipfile | while read line
do
  ip=`echo $line|awk  '{print $1}'`
  pw=`echo $line|awk '{print $2}'`
  ./kill_tomcat.exp $pw $ip
done

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: