我运行类似于以下获取SSH远程命令终止,使并行选项xargs的可以继续
getHosts | xargs -I{} -P3 -n1 ssh {} 'startServer; sleep 5; grep -m 1 "server up" <(tail -f log)'
问题的命令是,它似乎像SSH一会儿挂有时甚至好后服务器已经出现。此命令是否有任何问题可能导致它不终止,以便并行执行可以继续?当我在远程shell中运行命令时,服务器的检查似乎可靠,并在向服务器写入日志时按时关闭。
我运行类似于以下获取SSH远程命令终止,使并行选项xargs的可以继续
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
tail -f
不捕获该行并永远等待(因为tail
意志,默认情况下采取的最后10行)ssh
也可能会失败的各种原因进行连接:主机停机,钥匙丢了,等我想补充一些错误检查conditi附加组件写入日志和/或具有
|| echo "Failed to do stuff" | mail -s SUBJECT [email protected]
如果花费超过五秒钟的服务器上来,会发生什么?也许'grep'获得了一个日志文件的_old_版本,一个永远不会再被写入的日志文件? – sarnold
经验上五秒钟的时间足以让他们清除并重新创建。 – jonderry
如果你想保证它,你可以'rm -f日志; startserver的;触摸日志;尾-f log'(触摸将创建该文件,如果'startServer'没有,所以'tail'不会失败,该文件不存在)。 – Jay