1

我想要一个脚本,它可以自动在远程机器上运行大型数学计算作业。目前我这样做:

  • ssh进入远程机器;运行matlab脚本
  • 定期检查以查看工作是否已完成
  • 工作完成后,我scp将包含结果的文件手动返回到我的家用机器。

我尝试在我的脚本中使用这些行来完成这项工作(注意脚本在我的机器上运行):

ssh nohup matlab -r theScript; exit;
scp remote@~/files ~/files

这行不通。一段时间后,ssh 会话结束,脚本继续执行 scp,即使作业尚未完成且文件尚不存在。

我认为我需要做的是定期检查工作是否完成,也许通过定期ssh'ing并使用grep读取nohup.out文件寻找信号。DONE!然后当我看到时,将文件复制回来。但这似乎很复杂,我不知道如何将DONE!消息返回到我的计算机以运行条件(如果您看到DONE信号,请执行此操作...)任何想法?

4

3 回答 3

1

似乎有一种方法可以在您的ssh_config.

这个页面解释了如何: http: //nileshbansal.blogspot.com/2007/02/prevent-timeouts-in-ssh.html

于 2011-07-15T04:41:31.027 回答
1

是的,ssh 可能会超时或其他情况。所以,是的,你最好的选择是投票。例如

RUN="$(date +%Y%m%d-%H%M%S)"
ssh remote " nohup bash -c \"( matlab -r theScript; echo \$? > $RUN.done ) >$RUN.log 2>&1 </dev/null &\" "
DONE=""
while [ -z "$DONE" ]
do
    sleep 60
    DONE="$(ssh cat $RUN.done 2>/dev/null)"
done
if [ $DONE -eq 0 ]
then
    scp ...
else
    # Optionally fetch logfile
    # scp $RUN.log@remote ...
    echo "ERROR in remote matlab...."
fi
于 2011-07-15T04:45:39.923 回答
0

尝试ServerAliveInterval在你的ssh_config文件中设置。这样,在远程命令完成之前,您的 SSH 会话不会关闭。

这里

于 2011-07-15T04:41:18.187 回答