28

私は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

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

4

3 に答える 3

41

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

于 2012-02-02T19:26:32.433 に答える
2

一見すると、-o宣言で変数を角かっこで囲む必要があります。

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

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

于 2012-02-01T20:13:13.780 に答える
0

私は同じ問題に遭遇しました。そして、私の回避策は次のことでした。

#$ -N script-name
#$ -wd <path-to-project>/log 
cd ..

qsubスクリプトで。これで、エラーと出力ファイルがに保存され<path-to-project>/log 、スクリプトは<path-to-project> 少なくとも機能した私にとっては機能します

于 2021-03-13T07:22:37.840 に答える