我正在运行类似于以下内容的命令
getHosts | xargs -I{} -P3 -n1 ssh {} 'startServer; sleep 5; grep -m 1 "server up" <(tail -f log)'
问题是,ssh似乎会挂起一段时间,有时甚至在服务器启动后也会挂起一段时间。此命令是否存在任何问题,可能导致它无法终止以便并行执行可以继续?当我在远程 shell 中运行命令时,对服务器启动的检查似乎是可靠的,并且在将"服务器启动"写入日志时准时关闭。
而不是远程命令
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
,这样如果日志文件被轮换,我们将遵循新文件,而不是继续无用地跟随旧文件。
我可以看到它无法终止的两种方式:
- 远程端挂在
startServer
- 服务器在"server up"之后生成如此多的消息,
tail -f
没有抓住那一行并永远等待(因为默认情况下,tail
将占用最后 10 行)
ssh
也可能由于各种原因而无法连接:主机关闭、密钥丢失等。我会以写入日志和/或具有的形式添加一些错误检查条件
|| echo "Failed to do stuff" | mail -s SUBJECT TO@WHO.com