由于无法控制的原因,我进行了如下设置:

本地:script1.sh,它通过ssh在Wikitech上的远程服务器上调用script2.sh,然后等待script2.sh完成

远程:script2.sh,它在Wikidb上执行SQL查询并将结果写入文件“file.txt”。

在我的本地script1.sh中,我具有:

nohup ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=1000 user@remote "path/to/script2.sh $ARG1 $ARG2 $FILENAME"

在我的远程script2.sh中,我有一个查询,需要很长时间才能执行。思考时间。我没有太多余地来优化查询。
nohup sql enwiki "$QUERY">$FILENAME

执行script2.sh中的查询后,输出将重定向到“file.txt”。script1.sh(正在等待该文件),然后将“file.txt”向下sftps到本地,并将其发送以进行下游处理。

整个过程一直在本地shell的“nohup.out”中出现Write failed: Broken pipe错误,导致故障继续发生。

我已经放入nohupServerAliveIntervalServerAliveCountMax来尝试解决此问题,但这似乎没有帮助。

如果远程文件是完全创建的,则没有任何内容可写。

请帮忙?

最佳答案

我想你也应该重定向以下行的输出:

nohup ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=1000 user@remote "path/to/script2.sh $ARG1 $ARG2 $FILENAME" &>out.log

如果没有帮助,请使用bash -x执行脚本,以便我们可以准确地发现问题发生的位置

关于bash - 尽管有ServerAliveInterval/nohup,但通过远程登录进行SSH超时,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30044484/

10-15 12:15