Chinaunix首页 | 论坛 | 博客
  • 博客访问: 473222
  • 博文数量: 67
  • 博客积分: 2952
  • 博客等级: 少校
  • 技术积分: 679
  • 用 户 组: 普通用户
  • 注册时间: 2006-01-24 10:50
文章分类

全部博文(67)

文章存档

2011年(9)

2010年(36)

2009年(8)

2008年(5)

2007年(5)

2006年(4)

我的朋友

分类: LINUX

2010-08-19 16:29:22

场景: 需要从某一台中央管控机器ssh登录到其他机器,执行某个脚本(getinfo.sh)得到机器的相关信息。要求全部脚本实现,于是采用expect调用ssh。整个过程没有问题,问题在于所要执行的脚本getinfo.sh会执行另一个脚本a.sh,而a.sh比较耗时,所以整个过程会很耗时。现想减少执行时间。

debug: 鉴于a.sh比较耗时,于是用nohup调用a.sh到后台执行,可是发现ssh还是会等a.sh全部执行完才结束。可是交互登录对方机器,执行getinfo.sh,然后退出,很快。问题貌似在ssh的调用方式。于是查找ssh的参数,发现有一个参数 -t,解释是这样的:
-t 该参数通过指定一个伪终端迫使SecureShell客户端以交互模式工作,即使在给定命令的情况下也是如此。它被用于执行在远地主机上的基于屏幕的程序。
可是添加参数 -t 后发现,程序会很快执行完结束退出,可是根本就不执行a.sh了(进程里没有a.sh),这就很奇怪了,难道是getinfo.sh执行太快,nohup还没来得及起起来?在nohup 执行a.sh后加上sleep 1试试,问题解决,原来真是这个恶心的问题。

solution:
1. ssh -t -p $PORT $SERVER -l $LOGIN "sudo /bin/bash /tmp/getinfo.sh"
2. getinfo.sh中在a.sh后加上"sleep 1"
阅读(44927) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~