web-dev-qa-db-ja.com

qsubでエラーログファイルと出力ファイルを指定する方法

私はqsubスクリプトを持っています

#####----submit_job.sh---#####
    #!/bin/sh
    #$ -N job1
    #$ -t 1-100
    #$ -cwd
    SEEDFILE=/home/user1/data1
    SEED=$(sed -n -e "$SGE_TASK_ID p" $SEEDFILE)
    /home/user1/run.sh $SEED 

問題は-すべてのエラーファイルと出力ファイル(job1.eJOBID&job1.oJOBID)を、qsub submit_job.shを実行している場所から同じディレクトリに配置しますが、これらのファイル(出力とエラーログファイルを同じ別の場所に保存します)場所($ SEED_outputとして指定)。次のように行を変更しようとしました

/home/user1/run.sh $SEED -o $SEED_output

しかし、それはうまくいきませんでした。なにか提案を ??デフォルトの出力とエラーログファイルのパスと名前を指定するにはどうすればよいですか?

26
d.putto

通常、エラーファイルと出力ファイルは、qsubスクリプトのpbsディレクティブとして、または次のようにqsubスクリプトのコマンドラインオプションとして指定されます。

#! /bin/bash
#PBS -q queue_name
#PBS -A account_name
#PBS -l nodes=12:ppn=12
#PBS -l walltime=18:00:00
#PBS -e /mypath/error.txt
#PBS -o /mypath/output.txt

または、qsubのコマンドラインオプションとして次のようにします。

qsub -o /mypath/output.txt -e /mypath/error.txt submit_job.sh

最初のオプションでは、シェルはコメント化された行を見ないので、変数を使用できないと思います。さらに、PBSはシェルよりも前にコメント行を処理すると思います。 qsubを呼び出すときにパスがわかっている場合は、2番目のオプションを試すことができます。または、スクリプト自体の出力とエラーをリダイレクトすることもできます。

/home/user1/run.sh $SEED > ${SEED}/output.txt 2> ${SEED}/error.txt

3番目のオプションがおそらく最も簡単です。出力ファイルとエラーファイルは空の可能性がありますが、実行ディレクトリに作成される可能性があります。

35
Andy

一見すると、-o宣言で変数を括弧で囲む必要があります。

/home/user1/run.sh $SEED -o ${SEED}_output

それ以外の場合、bashは$ {SEED_output}と呼ばれる、存在しない変数を探しています。

3
Andy