2011-07-15 6 views
1

私は、リモートマシン上の大きな数学的計算ジョブの実行を自動化するスクリプトが必要です。現在、私はこれを行います:ssh、nohup、次に結果をコピー

  • sshリモートマシンへ: matlabスクリプトを実行する
  • ジョブが完了したかどうかを定期的に確認してください
  • 私は手動で結果を含むファイルを私の家のマシンに戻して、私は手動でscpを返します。

私は(スクリプトは私のマシン上で実行されます)この仕事をするために私のスクリプト内の行のこれらの種類を使用しようとしました:

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

これは動作しません。しばらくしてsshセッションが終了し、ジョブはまだ完了せず、ファイルがまだ存在しないにもかかわらず、scpを実行するだけでスクリプトが進行します。

私は、ジョブが完了したかどうか定期的にチェックして、nohup.outファイルを読んで、grepを使って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

ssh_configファイルにServerAliveIntervalを設定してみてください。そうすれば、リモートコマンドが終了するまでSSHセッションは終了しません。

hereを参照してください。

関連する問題