设为首页 收藏本站
查看: 779|回复: 0

expect脚本与shell脚本相结合

[复制链接]
累计签到:2 天
连续签到:1 天
发表于 2016-1-28 08:42:23 | 显示全部楼层 |阅读模式
                      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 &  
                   


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-170427-1-1.html 上篇帖子: Shell脚本之IP网络地址和广播地址计算 下篇帖子: Powershell RESTAPI 访问Office365 expect
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表