PBS作业排队管理

用-W depend属性去修改

然后对于 -W depend 这个一开始有点迷糊,后来看过Userguide之后,才知道depend后面可以接多种参数,然后再用分号接job id;

# <type>:<arg list>[,<type>:<arg list> ...] 这种形式
# 其中<arg list>为<job ID>[:<job ID> ...] 这种形式的一串任务id
# type有如下几种,要执行的该任务我们称之为“任务A”,而arg list为depend的其他任务

after:<arg list> # arg list 开始执行 => 任务A执行
afterok:<arg list> # arg list 成功执行完 => 任务A执行
afternotok:<arg list> # arg list 执行完失败后 => 任务A执行
afterany:<arg list> # arg list 执行完后(不管是否成功完成) => 任务A执行
before:<arg list> # 任务 A 开始执行 => arg list执行(依赖on:count)
beforeok:<arg list> # 任务 A 成功执行完后 => arg list执行(依赖on:count)
beforenotok:<arg list> # 任务 A 执行完失败后 => arg list执行(依赖on:count)
beforeany:<arg list # 任务 A 执行完(不管是否成功) => arg list执行(依赖on:count)
on:count # 需要依赖的任务数,和以上的before一起搭配使用

下面为几个示例,

示例一

你有job1、job2、job3 三个任务,你想要job3在job1、job2完成后才开始执行

qsub job1
16394.jupiter
qsub job2
16395.jupiter
qsub -W depend=afterany:16394:16395 job3
16396.jupiter

示例二

你想要job2,必须在job1成功执行完后才开始执行

qsub job1
16397.jupiter
qsub -W depend=afterok:16397 job2
16396.jupiter

示例三

job1要在job2、job3前完成,要使用 beforeany,你必须同时使用 on

qsub -W depend=on:2 job1
16397.jupiter
qsub -W depend=beforeany:16397 job2
16398.jupiter
qsub -W depend=beforeany:16397 job3
16399.jupiter

用qalter去修改已经提交的任务

有时候,我们是多人使用一个集群,或者我们提交前没有考虑到,那么我们想修改已经提交的任务,就需要使用 qalter 命令。

比如,我们想让id为16397的任务插队,那么命令为 qalter -W depend=afterok:16397 16396,那么16396号任务就会在16397号任务成功完成后才能开始执行。

另外,如果我们已经像上面那样添加了afterok属性了,而我们又想修改为16396在16397开始执行后就可以开始执行,而不用等到执行成功之后,我们直接 qalter -W depend=after:16397 16396 是不能修改的。我们需要先 qalter -W depend=afterok 16396 清除afterok属性后,才可以重新修改。

发表评论