获取ssh remote命令以终止,以便具有parallel选项的xargs可以继续

时间:2012-06-30 00:32:44

标签: bash ssh xargs

我正在运行类似于以下内容的命令

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

问题是,在服务器出现之后,似乎ssh有时会挂起一段时间。此命令是否有任何问题可能导致它不能终止,以便并行执行可以继续?当我在远程shell中运行该命令时,对服务器的检查似乎是可靠的,并且在将“server up”写入日志时准时关闭。

2 个答案:

答案 0 :(得分:1)

我可以通过两种方式看到它无法终止:

  1. 远程端挂起startServer
  2. 服务器在“服务器启动”之后生成了很多消息,tail -f没有捕获该行并且永远等待(因为tail将默认采用最后10行)
  3. ssh也可能由于各种原因而无法连接:主机关闭,密钥丢失等。我会以写入日志和/或

    的形式添加一些错误检查条件
    || echo "Failed to do stuff" | mail -s SUBJECT TO@WHO.com
    

答案 1 :(得分: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的{​​{1}}选项代替-F,这样如果日志文件被轮换,我们将关注新文件,而不是继续无用地关注旧文件。