2013-10-22 35 views
1

我有一個將數據結構拆分爲塊的腳本。塊使用扭矩作業數組進行處理,然後合併回單一結構。如何等待扭矩作業陣列完成

合併操作取決於作業數組完成。如何使合併操作等待扭矩作業陣列完成?

$ qsub --version 
Version: 4.1.6 

我的腳本如下:

# Splits the data structure and processes the chunks 
qsub -t 1-100 -l nodes=1:ppn=40,walltime=48:00:00,vmem=120G ./job.sh 
# Merges the processed chunks back into a single structure 
./merge.sh 

我曾嘗試:

qsub -t 1-100 -l nodes=1:ppn=40,walltime=48:00:00,vmem=120G -N job1 ./job.sh 
qsub -W depend=afterokarray:job1 ./merge.sh 

也:

qsub -t 1-100 -l nodes=1:ppn=40,walltime=48:00:00,vmem=120G -N job1 ./job.sh 
qsub -hold_jid job1 ./merge.sh 

但是都沒有成功。前者導致錯誤[qsub:非法-W值],後者導致錯誤:qsub:腳本文件'job1'不能被加載 - 沒有這樣的文件或目錄。

+1

您沒有正確地使用'afterokarray'語法執行qsub < nueva_tarea_2.bash一個他們使用(10 []。碼頭工人)在其他submitssion文件。它應該是-W depend = afterokarray:12345 []其中12345 []是由前面的'qsub'返回的數組作業ID。另請參閱[在此處](http://stackoverflow.com/a/18463349/1328439)。 –

+1

@Josh - 使用-hold_jid標誌時,您是否曾解決過使用「'job1'無法加載」錯誤的問題?我目前正試圖實現這個相同的功能,並遇到相同的錯誤。謝謝! –

回答

2

qsub -t 1-100 -l nodes=1:ppn=40,walltime=48:00:00,vmem=120G -N job1 ./job.sh 

輸出包含作業ID。 所以下面應該在bash工作:

FIRST=`qsub first_1.sh` 
qsub -W depend=afterok:$FIRST second_1.sh 
+0

這擺脫了與非法-W值有關的錯誤,但第二個腳本(在您的示例中爲second_1.sh)似乎沒有運行。 – Josh

0

答案

你應該用戶afterokarray

ID=$(qsub -t 1-100 -l nodes=1:ppn=40,walltime=48:00:00,vmem=120G -N job1 ./job.sh) 
qsub -W depend=afterokarray:$(ID) ./merge.sh 

又如

這是另外一個例子,我們說你需要執行一個工作兩次後,執行另一個工作:

#!/bin/bash 
#PBS -q batch 
#PBS -l walltime=24:00:00 
#PBS -o /app/run/KLFLO/nueva_tarea_0.$PBS_ARRAYID.out 
#PBS -e /app/run/KLFLO/nueva_tarea_0.$PBS_ARRAYID.err 
#PBS -N KLFLO_nueva_tarea_0 
#PBS -t 1-2 # times 
sleep 20 
/bin/cat /etc/hosts 

#!/bin/bash 
#PBS -q batch 
#PBS -l walltime=24:00:00 
#PBS -o /app/run/KLFLO/nueva_tarea_2.$PBS_ARRAYID.out 
#PBS -e /app/run/KLFLO/nueva_tarea_2.$PBS_ARRAYID.err 
#PBS -N KLFLO_nueva_tarea_2 
#PBS -t 1-2 # times 
#PBS -W depend=afterokarray:10[].docker 
/bin/cat /etc/hosts