私はです。シェルスクリプトには新しく、複数のqsub
ジョブをサブミットするシェルパイプラインを作成しようとしていますが、これらのqsubs最新の仕事が完了したことを条件にしています。私は、qsub
ジョブの提出後にシェルスクリプトの処理を続行しようとする複数の方法を研究していますが、どれも成功していません。次のようにPBSのqsub配列ジョブが完了するまで残りのシェルスクリプトコマンドを保持する
私は、問題を説明するために提供することができ、コードの最も簡単なチャンクは次のとおりです。
THREADS=`wc -l < list1.txt`
qsub -V -t 1-$THREADS firstjob.sh
echo "firstjob.sh completed"
あり、実際firstjob.sh仕上げ上の偶発あり、この後のコードの他の行は明らかにされているが、私は省略されています明快にするためにここに示します。
wait
1)すべてのバックグラウンドプログラムが完了するまでスクリプトを停止するはずのwait
のみを使用しています。これは、wait
の直後にプッシュし、アレイジョブが実行中のときに端末にecho
ステートメントを出力しました。私が推測するのは、qsub
ジョブが提出されてから終了し、wait
は完了したと考えているからです。
qsub -V -t 1-$THREADS firstjob.sh
wait
echo "firstjob.sh completed"
2)、変数にジョブの設定ジョブを提出し、その変数をエコー、および一時停止するwait
と共に全体のジョブIDを使用して。 echoコマンドは、配列ジョブのすべての要素が完了するまで待機する必要があります。エラーメッセージは、コードの後にコードブロック内に表示されます。
job1=$(qsub -V -t 1-$THREADS firstjob.sh)
echo "$job1"
wait $job1
echo "firstjob.sh completed"
####ERROR RECEIVED####
-bash: wait: `4585057[].cluster-name.local': not a pid or valid job spec
3)qsub
のために-sync y
を使用する。これは、ジョブが完了するまで、それがqsub
を終了するのを防ぐべきです。効果的な一時停止として機能します...私は望んでいました。コマンドの後にコメントに誤りがあります。何らかの理由で、-syncオプションが正しく読み込まれていませんか?私は、スクリプトを一時停止するqsub
の-W depend=afterok:
オプションを使用することができるように
qsub -V -sync y -t 1-$THREADS firstjob.sh
echo "firstjob.sh completed"
####ERROR RECEIVED####
qsub: script file 'y' cannot be loaded - No such file or directory
4)(ダミーがちょうど空のファイルを作る)ダミーのシェルスクリプトを使用しました。これは、ダミースクリプトを提出するために一時停止することなく、echoのステートメントに直ちにプッシュします。両方のジョブがサブミットされ、すぐ後に1つ、一時停止しません。
job1=$(qsub -V -t 1-$THREADS demux.sh)
echo "$job1"
check=$(qsub -V -W depend=afterok:$job1 dummy.sh)
echo "$check"
echo "firstjob.sh completed"
スクリプトに関するいくつかの詳細:
- 各ジョブの提出は、配列ジョブです。
- パイプラインは、次のようなコマンドを使用してターミナルで実行されていますので、私は3つの入力を提供します:ソースPipeline.sh -r list1.txt -d/workingDir/-s list2.txt
showq
を使用すると、firstjob.shが実際に実行を完了していないことが確認されています。
おそらく、これらのシナリオのほとんどで簡単に修正されているかもしれませんが、これに新しいものがあります。私は本当に苦労しています。私はスクリプトを通して8-10の場所でこのメソッドを使用する必要があるので、実際に進歩を妨げています。助けていただければ幸いです。ありがとう。ここで
POSTのEDIT 1はfirstjob.shに含まれるコードは...怪しいのにそれが役立つことを。ここにあるものはすべて期待どおりに機能し、常に正しい結果を生成します。
\#! /bin/bash
\#PBS -S /bin/bash
\#PBS -N demux
\#PBS -l walltime=72:00:00
\#PBS -j oe
\#PBS -l nodes=1:ppn=4
\#PBS -l mem=15gb
module load biotools
cd ${WORKDIR}/rawFQs/
INFILE=`head -$PBS_ARRAYID ${WORKDIR}${RAWFQ} | tail -1`
BASE=`basename "$INFILE" .fq.gz`
zcat $INFILE | fastx_barcode_splitter.pl --bcfile ${WORKDIR}/rawFQs/DemuxLists/${BASE}_sheet4splitter.txt --prefix ${WORKDIR}/fastqs/ --bol --suffix ".fq"
'firstjob.sh'の中にrelaventコードを含めるようにQを編集し、' wait'に応答するバックグラウンドプロセスをどこで使用しているのかを指定してください。良い最初の質問。幸運。 – shellter
Thanks shellter。私はあなたのコメントの後半部分が何を意味しているかは完全には分かっていませんが、少し詳しく説明できますか? "wait"に応答するプロセス? –
ええ、おっと、私はあなたが 'qsub'に仕事を渡していることを認識しています。サブプロセスをフォークして管理しているので、必ずしも'& 'は関係しません。しかし、それは 'wait'を使うことはあなたを助けません。私が考えることができるのは、 'qsub'ジョブがステップが完了したときに一意のフラグファイルを作成してから、それらのファイルが表示されるまでスクリプトが待機するようにすることだけです。ステータス情報(処理済み、エラー、警告など)を含むフラグファイルの追加クレジットここで 'qsub'のフォロワーは非常に少ないので、私はqsub固有のサポートフォーラムを探します。がんばろう! – shellter