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