runjob 任务调度
runjob是用于SGE集群、Slurm集群和本地任务投递、调度、监控的工具。用于管理job格式的任务文件,基于python语言实现了其功能,并结合实际生物信息应用场景,做了很多使用优化。
runjob读取job输入文件,根据文件中指定的job格式规则,将任务分发到本地服务器、SGE集群或Slurm集群运行。runflow 命令功能与 runjob 完全一致。
主要特点
每个任务对应一个唯一的日志文件,记录了任务运行的输出和状态。
实时的任务日志和状态监控记录,维护了动态的运行时的任务队列。
某个任务失败报错可重新投递运行。
程序运行中断,重新执行只需要和第一次运行的命令一样即可,不需要进行改动。
每次程序运行会自动跳过已经运行成功的任务。
程序中断或被杀掉时,可以自动清理正在运行中的任务,避免计算资源的浪费和流程运行步骤的不确定。
支持
--dag和--dag-extend输出任务依赖图,方便流程可视化。支持
includes引入外部规则文件,复用任务定义。支持
envs/vars变量展开,自动按笛卡尔积生成组合任务。支持
extends继承已有任务模板。……
参数说明
输入命令runjob --help可查看参数配置,各参数介绍如下:
参数 |
描述 |
|---|---|
-h/–help |
打印帮助信息并退出 |
-v/–version |
打印软件版本并退出 |
-j/–jobfile |
输入的job流程任务文件(必填,默认从stdin读取) |
-i/–match |
只运行job文件中匹配任务名的任务(支持 glob/正则),多个匹配用空白隔开,默认全部任务 |
-s/–start |
只运行job文件中从指定行开始后面的任务,默认第1行 |
-e/–end |
只运行job文件中到指定行之前的任务,默认最后一行 |
-n/–num |
同时运行的最大任务数,默认全部(最大1000) |
-M/–mode |
任务运行模式,可选 |
-w/–workdir |
任务提交时的工作目录,默认为当前目录 |
-L/–logdir |
各任务的日志输出文件夹,默认为 |
-q/–queue |
SGE/Slurm 集群队列名,多个用空白隔开 |
-c/–cpu |
任务使用的cpu资源申请,默认1 |
-m/–memory |
任务使用的内存资源申请,默认1G |
–node |
任务运行的集群节点,多个用空白隔开 |
–round-node |
在所有指定节点间轮询分配任务 |
-r/–retry |
任务运行失败后重新投递次数,默认0(不重投) |
-R/–retry-sec |
任务错误后重投的等待时间,单位秒,默认2 |
–max-check |
每秒最大检查任务状态次数,默认5 |
–max-submit |
每秒最大投递任务数,默认20 |
–max-queue-time |
任务从提交到开始运行的最大等待时间(支持d/h/m/s格式) |
–max-run-time |
任务最大运行时间(支持d/h/m/s格式) |
–max-wait-time |
任务从提交开始的最大存活时间(支持d/h/m/s格式) |
–max-timeout-retry |
超时任务的重试次数,默认0 |
–init |
所有任务开始之前运行的命令(本地执行) |
–callback |
所有任务结束之后运行的命令(本地执行) |
–dag |
输出任务依赖图(dot语言),不执行任务 |
–dag-extend |
输出扩展任务依赖图(dot语言),不执行任务 |
–abort-on-error |
严格模式,单个任务失败则终止所有任务并退出 |
-f/–force |
强制重新提交已成功的任务 |
–quiet |
静默模式,不输出日志 |
-d/–debug |
程序日志级别debug,默认info |
-l/–log |
程序日志输出文件,默认屏幕输出 |
–config |
指定配置文件路径 |
–show-config |
打印当前配置并退出 |
job输入文件格式说明
runjob输入的job文件格式规范如下:
log_dir /path/to/logdir
job_begin
name jobA
host sge
sched_options -q all.q -l vf=1g,p=1
cmd_begin
echo hello from job jobA
cmd_end
job_end
job_begin
name jobB
sched_options -q all.q -l vf=1g,p=1
cmd_begin
echo hello from job jobB
cmd_end
job_end
job_begin
name jobC
host localhost
cmd_begin
echo hello from job jobC
cmd_end
job_end
order jobC after jobA jobB
log_dir/logdir指定流程运行的任务输出日志文件夹job_begin和job_end代表了一个任务的开始和结束name定义任务的名称host指定任务运行方式:sge、slurm、local或localhostsched_options/options/args定义集群投递参数:-c/--cpu N申请 N 个 CPU-m/--memory N申请内存-q/--queue NAME指定队列-l vf=MEM,p=CPU资源限定格式
cmd_begin和cmd_end之间为任务运行的命令order ... after ...定义任务依赖关系order ... before ...等价于上述反向依赖A -> B或A : B或A <- B也可定义依赖关系#开头为注释
扩展字段
memory/mem: 指定任务内存cpu: 指定任务 CPUqueue: 指定任务队列depends: 指定任务依赖,等价于 order 语句force: 强制重新运行(true/yes/1)local/localhost: 在本地运行(true/yes/1)status: 任务初始状态max_queue_time/max_run_time/max_wait_time: 超时控制max_timeout_retry/time: 超时重试次数及时间extends: 继承已有任务定义,自动展开变量cmd: 单行命令(替代 cmd_begin/cmd_end 块)
变量展开与模板继承
envs sample01
S=A1 B1 C1
LIB=lib1
envs sample01
S=FP1 RP1
job_begin
name mapping_${S}.${LIB}
extends mapping
job_end
# 上面定义会自动展开为:
# mapping_A1.lib1, mapping_B1.lib1, mapping_C1.lib1,
# mapping_FP1.lib1, mapping_RP1.lib1
外部规则引入
includes path/to/common_rules.job
通过 includes 可引入外部 job 规则文件,复用通用任务定义。
流程进度查看
任务状态和任务运行进度可以通过查看输出日志文件或者通过qs命令进行查看,可参考 qs集群和本地任务查看。