2011-07-15 26 views
1

我想要一个脚本,它可以在远程机器上自动运行大型数学计算作业。目前我这样做:ssh,nohup,然后将结果复制回

  • ssh进入远程机器;运行matlab脚本
  • 定期检查看看作业是否完成
  • 当作业完成后,我手工将scp包含结果的文件传回我的主机。

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

ssh nohup matlab -r theScript; exit; 
scp [email protected]~/files ~/files 

这是行不通的。经过一段时间后,ssh会话结束,脚本开始执行scp,即使作业尚未完成,文件还不存在。

我认为我需要做的是定期检查工作是否完成,也许通过定期sshing和读取nohup.out文件寻找使用grep DONE!信号。然后当我看到时,将文件复制回来。但是,这似乎很复杂,我不知道如何获得DONE!消息回我的电脑运行条件(如果你看到DONE信号,做这个东西......)任何想法?

回答

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 [email protected] ... 
    echo "ERROR in remote matlab...." 
fi 
0

尝试将ServerAliveInterval设置为ssh_config文件。这样,直到远程命令完成后,您的SSH会话才会关闭。

请参阅here

相关问题