最近公司代理了一款游戏,跑在linux平台下的2,5D游戏,呵呵,虽然不爱玩,但是维护有我负责,由于在内部测试阶段,所以版本更新的特别频繁,虽然更新很简单就那么几条语句就搞定,可是20多台服务器每台都要敲一遍,后来写了个简单的脚本,让他自动更新,并插入sendemail 如果发现问题及时给手机报警。。。。。。。。。 但是就是这样每次更新停服,或者维护都需要依次的ssh到每台服务器上去手动执行一遍相应的脚本。

      为了方便省事,写了个expect脚本,在一台机器上进行批量管理与维护。

  vi login.exp

 

#!/usr/bin/bash
#exec sleep 5
spawn ssh tfhudong@[lindex $argv 0]
set password [lindex $argv 1]
set option [lindex $argv 2]
set version [lindex $argv 3]
#expect "*?"
#send "yes\r"
expect "*password:"
send "$password\r"
exec sleep 2
send "LANG=zh_CN.GBK\r"
expect "*$"
send "su -\r"
expect "*:"
exec sleep 2
send "$password\r"
expect "*#"
send "cd \/chupdate\r"
expect "*#"
send ".\/update.sh $option $version &\r"
expect eof
 

写这个的同时我写了另一个脚本,里面放着关于游戏内部做相应操作的参数与选项,大致就是用另一个脚本区调用上面的脚本 依次去执行每台服务器上的语句。

调用脚本中 大致语句贴出来一句 如下: 

       for IP in $(cat daqinserver.txt)
           do
           expect login.exp $IP $PASSWORD stop
           done

这个daqingserver.txt中式ip地址

vi daqinserver.txt

192.168.10.10

192.168.10.11

192.168.10.13

192.168.10.12

至于expect的参数,就不解释了,因为我接触时间也不长。。嘿嘿