Bash ssh,nohup,然后将结果复制回来

Bash ssh,nohup,然后将结果复制回来,bash,shell,ssh,nohup,Bash,Shell,Ssh,Nohup,我想要一个脚本,它可以自动在远程机器上运行大型数学计算作业。目前我这样做: ssh进入远程机器;运行matlab脚本 定期检查工作是否完成 作业完成后,我手动scp将包含结果的文件返回到我的家用计算机 我尝试在脚本中使用这些行来完成此工作(请注意,脚本在我的计算机上运行): 这不管用。一段时间后,ssh会话结束,脚本继续执行scp,即使作业尚未完成,文件也不存在 我想我需要做的是定期检查工作是否完成,也许可以通过ssh定期输入并读取nohup.out文件来查找完成使用grep发送信号。然后当

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

  • ssh
    进入远程机器;运行matlab脚本
  • 定期检查工作是否完成
  • 作业完成后,我手动
    scp
    将包含结果的文件返回到我的家用计算机
我尝试在脚本中使用这些行来完成此工作(请注意,脚本在我的计算机上运行):

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


我想我需要做的是定期检查工作是否完成,也许可以通过ssh定期输入并读取
nohup.out
文件来查找
完成使用grep发送信号。然后当我看到的时候,把文件复制回来。但这似乎很复杂,我不知道如何完成
返回到我的计算机以运行条件(如果您看到
完成
信号,请执行此操作…)有什么想法吗?

尝试在
ssh\u config
文件中设置
ServerAliveInterval
。这样,直到远程命令完成,SSH会话才会关闭


请参阅。

似乎有一种方法可以在您的
ssh\u配置中配置它


本页解释了如何执行:

是的,ssh可能会超时或发生其他情况。所以,是的,你最好的选择是投票。e、 g

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
RUN=“$(日期+%Y%m%d-%H%m%S)”
ssh远程“nohup bash-c\”(matlab-r theScript;echo\$?>$RUN.done)>$RUN.log 2>&1
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