如何等待扭矩作业阵列完成

时间:2013-10-22 12:28:47

标签: cluster-computing torque

我有一个将数据结构拆分成块的脚本。使用扭矩作业阵列处理块,然后合并回单个结构。

合并操作取决于作业数组的完成情况。如何使合并操作等待扭矩作业阵列完成?

$ 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'无法加载 - 没有这样的文件或目录。

2 个答案:

答案 0 :(得分:2)

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

包含jobid。 所以下面应该在bash中工作:

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

答案 1 :(得分: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

在另一个提交文件中执行qsub < nueva_tarea_2.bash他们使用(10 []。泊坞窗)

#!/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