expect脚本与shell脚本相结合

简介:
+关注继续查看

Expect脚本和shell脚本相结合—断电后可实现执行一个脚本启动所有应用

expect脚本我们这里只使用了expect 和 send,expect意味着出现的提示信息,send就可以书写正常的linux命令,具体看例子。具体书写还是要靠大家自己调试,基本框架都是我这个例子里面。

这个例子是bash脚本和expect脚本相结合

#!/bin/bash                             --bash脚本的标志

/usr/bin/expect <<EOF                    --这里意味着bash脚本中嵌套着expect脚本

set timeout -1                           --设置超时时间,-1意思是永远也不超时

spawn ssh root@192.168.20.115           --意味着远程登录到我这个应用的数据库服务器

expect {                              --第一次远程登录别的服务器的时候会出现一些

                                       提示,你可以在你自己的应用上ssh +IP尝试一下,我这里                                        会出现(yes/no),接着会让我输入密码。第二次登录就是                                        直接提示输入密码。所以这里是‘或’关系中嵌套                                                着‘与’关系。根据{}的组合来进行理解

"*(yes/no)*" {

  send "yes\n"

  expect "asswd:"

  send "Pandora!74\n"}


"*password:" {send "Pandora!74\n"}

}

expect "*#"                       --expect是出现的提示信息,不同的系统不一样,你的可能是 “*$”,这里是正则表达式的匹配用法

send "ps -ef | grep oracle\n"          -- send是输入的命令

expect "*oracle*oraclehrdb"

send "exit\n"                        --退出远程的数据库服务器,回到本地应用服务器

expect "*#"

spawn ssh root@192.168.20.217        --远程登录到另一台应用服务器,启动这个应用服务器上面的启动脚本

expect {

"*(yes/no)*" {

  send "yes\n"

  expect "asswd:"

  send "Pandora!74\n"}

"*password:" {send "Pandora!74\n"}

}

expect "*#"

send "cd /opt/jboss-eap-6.2\n"

expect "*#"

send "sh zidong.sh\n"

expect "*#"

send "exit\n"


expect eof

EOF                          --退出expect脚本

#最终启动自己的Jboss

ps -ef | grep jboss | grep -v grep | cut -c 9-15 | xargs kill -s 9

rm -rf /opt/jboss6/jboss-eap-6.2/standalone/tmp/*

nohup /opt/jboss6/jboss-eap-6.2/bin/standalone.sh  -Djboss.bind.address=0.0.0.0 -Dorg.jboss.as.logging.per-deployment=false  & >> /opt/jboss6/nohup.out


这样最终你就可以实现只在一个服务器上写一个启动脚本,远程登录到其他的应用服务器,启动那个应用上的脚本。我这里只是远程登录了两个,你可以按照例子远程多个。


注意事项:1、这个脚本一定要放到和Jboss的启动脚本一个路径,否则就会出现不能够执行的状况,因为获取不到JBOSS的变量。

2、我们的应用的启动脚本都会有一句tail –f nohup.out ,把启动日志放到前台,我们这里不需要放到前台,因为放到前台会有很多的日志信息,看起来很乱,因此不需要加这个语句,只需要让JBOSS自己在后台运行就可以。因此你可以自己再另写一个启动JBOSS的脚本。

3、我这里只是我系统的例子,因为我已经吧所有的oracle设置为开机启动了,因此这里只需要查看一下oracle的状态就可以,也可以不查看,加入开机启动即可。

4、最好把自己系统上的一些其余的软件都设置为开机启动,或者写到我们这脚本里面也可以

另一个数据库是mysql数据库,因为我的MySQL没有实现开机自启,我就把启动MySQL放到了脚本里面。

#!/bin/bash

/usr/bin/expect <<EOF

set timeout -1

spawn ssh root@192.168.20.208   --MySQL数据库服务器

expect {

"*(yes/no)*" {

  send "yes\n"

  expect "asswd:"

  send "Pandora!74\n"}

"*password:" {send "Pandora!74\n"}

}

expect "*#"                     --查看MySQL运行状态,没有运行就启动,正在运行就退出

send "service mysql status\n"

expect {

"*ERROR! MySQL is not running*"  {

                                  send "service mysql start\r";

                                  expect "*#"

                                  send "exit\n"

                                  }

"*SUCCESS! MySQL running*" {send "exit\n"}


}

expect eof

EOF

ps -ef | grep jboss | grep -v grep | cut -c 9-15 | xargs kill -s 9           --杀进程

rm -rf /opt/jboss-eap-6.2/standalone/dppm-deploy/dppm-web.war

cp-r/opt/Jenkins/test_NewPackage/dppm-web.war /opt/jboss-eap-6.2/standalone/dppm-deploy/

nohup bin/standalone.sh  -c=dppm.xml -Derrors.port.offset=0 -Dfile.encoding=utf-8 -Djboss.bind.address=0.0.0.0  -Dorg.jboss.as.logging.per-deployment=false > ./nohup.out 2>&1 &  


本文转自aaa超超aaa 51CTO博客,原文链接:http://blog.51cto.com/10983441/1739193

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
18天前
|
监控 机器人 Shell
用shell脚本编写一个监控应用服务的脚本,外发到微信群
用shell脚本编写一个监控应用服务的脚本,外发到微信群
20 1
|
18天前
|
监控 关系型数据库 Shell
用shell脚本编写一个监控rds数据库外发到钉钉群的脚本
用shell脚本编写一个监控rds数据库外发到钉钉群的脚本
26 1
|
18天前
|
Shell
用shell脚本编写一个日常巡检机器脚本
用shell脚本编写一个日常巡检机器脚本
25 2
|
1月前
|
运维 Shell Linux
【运维知识高级篇】超详细的Shell编程讲解1(Shell作用+脚本书写方式+脚本执行方式+变量分类+变量配置文件+变量定义+Shell重要的位置变量+三种传参方式)
【运维知识高级篇】超详细的Shell编程讲解1(Shell作用+脚本书写方式+脚本执行方式+变量分类+变量配置文件+变量定义+Shell重要的位置变量+三种传参方式)
112 0
|
1月前
|
存储 关系型数据库 Shell
shell语言最实用的脚本练习
shell语言最实用的脚本练习
|
1月前
|
Shell Go
go 执行shell脚本 在指定目录下执行指定脚本
go 执行shell脚本 在指定目录下执行指定脚本
28 0
|
1月前
|
机器学习/深度学习 Shell Linux
Shell基础学习---1、Shell概述、脚本入门、变量
Shell基础学习---1、Shell概述、脚本入门、变量
|
Shell Linux 网络安全
Shell脚本中利用expect实现非交互式
expect非交互式 expect可以在脚本中完成一些交互式的操作,例如远程登录时要输入yes或者输入密码 expect是一个自动化交互套件,主要应用于执行命令和程序时,系统以交互形式要求输入指定字符串,实现交互通信。 expect自动交互流程:
413 0
|
Unix Shell 网络安全
shell expect权威指南和实战
一、概述         我们通过Shell可以实现简单的控制流功能,如:循环、判断等。但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如telnet服务器等进行交互的功能。
1861 0
|
Shell 网络安全
shell expect简单用法
#!/usr/bin/expect -f spawn ssh-keygen -t rsa expect "*(/root/.ssh/id_rsa):" send "\r" expect "*(empty for no passphrase):" sen...
1054 0