案例十六、自动化运维-批量关Tomcat服务
生产环境中往往在多台机器上运行同一个服务(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
- 利用python实现批量自动化运维脚本案例
- 利用python实现批量自动化运维脚本案例
- 利用python实现批量自动化运维脚本案例
- 部署 SaltStack 自动化运维工具,并简易批量安装 httpd 服务
- 运维自动化01-批量安装linux系统
- 云计算节点故障自动化运维服务设计
- 自动化运维之-PXE实现系统批量自动安装
- Linux 运维自动化之Cobbler实战案例
- 第三十天-ssh key企业批量分发自动化管理案例
- 基于Spark streaming的SQL服务实时自动化运维
- 【自动化】基于Spark streaming的SQL服务实时自动化运维
- shell一键自动化批量安装服务
- tomcat 服务脚本案例
- Ansible:自动化运维(批量部署)
- CentOS 6.5自动化运维之基于cobbler服务的自动化安装操作系统详解
- Cobbler自动化批量安装系统服务搭建详解
- CentOS 6.5自动化运维之基于cobbler服务的自动化安装操作系统详解
- 运维自动化之批量部署(cobbler)的使用
- 重头搭建自己的微服务框架以及k8s+docker运维,实现自动化部署
- python自动化运维 第2章 业务服务监控详解 2.1.1