2013-10-22 32 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