Chinaunix

标题: expect ssh多台机器退出后hang住问题 [打印本页]

作者: 93846273    时间: 2013-01-31 14:56
标题: expect ssh多台机器退出后hang住问题
本帖最后由 93846273 于 2013-01-31 14:59 编辑

请教下CU的shell expect大牛。
现在有3个文件,a.expect的代码如下,其中1.sh的执行时间大约在15分钟左右
  1. #!/usr/bin/expect -f
  2. #autologin remotehost expect script

  3. set timeout 1800
  4. set host [lindex $argv 0]
  5. set passwd 123456
  6. spawn ssh $host
  7. expect {
  8.         "(yes/no)"  {send "yes\r";exp_continue}
  9.         "password:" {send "$passwd\r"}
  10. }
  11. expect -re "($|#)"
  12. send "wget -P /tmp abc.com:/tmp/1.sh\r"
  13. send "sh /tmp/1.sh\r"
  14. send "exit 1\r"
  15. expect eof
复制代码
a.sh的代码如下
  1. #!/bin/bash
  2. #login&exec script
  3. for k in `cat hosts.txt`
  4.     do
  5.         (
  6.         expect a.expect $k
  7.         )&
  8.     done
  9. wait
复制代码
第三个文件hosts.txt是主机名列表,里面有100台机器,第一行是1.1.1.1,第二行是2.2.2.2,依次最后一行是100.100.100.100


问题是,每次同时登陆多台机器执行脚本a.sh的时候,在目标机器上能够顺利执行完脚本,不过到最后exit即退出目标主机的时候,有时能够退出来,但有时就卡住了,必须手工敲入ctrl+c才能退出,很是奇怪,脚本写的有问题吗?麻烦大牛协助分析,谢谢。
作者: blackold    时间: 2013-02-01 07:03
回复 1# 93846273


    是不是还没执行完呢?
作者: 93846273    时间: 2013-02-01 13:20
回复 2# blackold
是的   试了几下,总会有那么1,2台没有执行,但是还是在登陆状态,expect设置的timeout超时时间后就自动退出了

   
作者: waker    时间: 2013-02-01 13:48
适当的sleep 一下再send
另外 "password:" 和"password: "是有区别的
系统提示符也不一定是$或#
作者: 93846273    时间: 2013-02-01 18:08
本帖最后由 93846273 于 2013-02-01 18:10 编辑

回复 4# waker
谢谢waker大神
send "wget -P /tmp abc.com:/tmp/1.sh\r"
这个脚本里也有wget的操作,后来我也适当的加了一些sleep,结果发现如果同时执行30多台的话,总有那么4-5台没有执行成功。
另外弱弱的问下waker大神,"password:"和"password: ",貌似多了个空格,除了这个还有其他区别吗。。。
   
作者: waker    时间: 2013-02-02 09:14
回复 5# 93846273


   区别就是多了一个空格,机器的速度比手指快的多,exploring expect一书中对这个问题有专门的描述,有时间看看
作者: 93846273    时间: 2013-02-05 10:31
回复 6# waker
好的,多谢waker

   
作者: tank064    时间: 2013-02-05 17:37
楼主不加并发数控制么?
作者: 93846273    时间: 2013-02-16 11:52
回复 8# tank064
比如如何控制呢?

   
作者: fufelixzh    时间: 2013-02-16 15:38
a little comments , hope useful for you
try use spawn_id
and add sleep between send or add expect to check return value
"send "wget -P /tmp abc.com:/tmp/1.sh\r"
send "sh /tmp/1.sh\r"
send "exit 1\r
"

作者: 93846273    时间: 2013-02-18 17:30
回复 10# fufelixzh
非常感谢!

   




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2