1

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

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

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

4

2 回答 2

1

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

  1. 远端挂起startServer
  2. 服务器在“服务器启动”之后生成了这么多消息,tail -f不会捕获该行并永远等待(因为tail默认情况下会占用最后 10 行)

ssh也可能由于多种原因无法连接:主机关闭、密钥丢失等。我会以写入日志和/或拥有的形式添加一些错误检查条件

|| echo "Failed to do stuff" | mail -s SUBJECT TO@WHO.com
于 2012-06-30T00:43:31.470 回答
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,这样如果日志文件被轮换,我们将跟随新文件,而不是继续无用地跟随旧文件。
于 2012-06-30T08:25:51.893 回答