2012-06-30 39 views
1

我运行类似于以下获取SSH远程命令终止,使并行选项xargs的可以继续

getHosts | xargs -I{} -P3 -n1 ssh {} 'startServer; sleep 5; grep -m 1 "server up" <(tail -f log)' 

问题的命令是,它似乎像SSH一会儿挂有时甚至好后服务器已经出现。此命令是否有任何问题可能导致它不终止,以便并行执行可以继续?当我在远程shell中运行命令时,服务器的检查似乎可靠,并在向服务器写入日志时按时关闭。

+0

如果花费超过五秒钟的服务器上来,会发生什么?也许'grep'获得了一个日志文件的_old_版本,一个永远不会再被写入的日志文件? – sarnold

+1

经验上五秒钟的时间足以让他们清除并重新创建。 – jonderry

+0

如果你想保证它,你可以'rm -f日志; startserver的;触摸日志;尾-f log'(触摸将创建该文件,如果'startServer'没有,所以'tail'不会失败,该文件不存在)。 – Jay

回答

1

代替远程命令时的形式

startServer; sleep 5; grep -m 1 "server up" <(tail -f log) 

我最好使用

grep -m 1 "server up" <(tail -F log -n 0) & startServer ; wait 

差异:

  • 在之前开始拖尾日志尝试重新启动服务器,以便我们不会错过任何消息。我们从日志结尾开始,因此我们没有看到任何以前的“服务器启动”消息。
  • 使用tail-F选项而不是-f,这样如果日志文件被旋转,我们将跟随新文件,而不是继续无用地跟随旧文件。
1

两种方式我可以看到它未能终止:

  1. 对端挂在startServer
  2. 服务器“服务器上”后,产生了很多邮件,tail -f不捕获该行并永远等待(因为tail意志,默认情况下采取的最后10行)

ssh也可能会失败的各种原因进行连接:主机停机,钥匙丢了,等我想补充一些错误检查conditi附加组件写入日志和/或具有

|| echo "Failed to do stuff" | mail -s SUBJECT [email protected] 
+0

肯定是有用的,但是这不会帮助'ssh'更快...... – sarnold

+0

真正的失败,但我认为这个问题是问,如果有,将导致命令不终止的情况。同意,这不会造成'ssh'改变丝毫行为。 – Jay

+1

哦,好点约_ten线_... – sarnold