如何恢复Achelous 作业
生物信息流程开发和实际分析过程中,经常涉及对流程的调试。因此需要对运行至中途的任务进行恢复操作,Achelous 结合生物信息工作人员的需要,开发了作业恢复机制,可以使用户轻松实现对流程修改后的继续运行,而无需从头运行程序。
作业运行状态说明
对于通过Achelous 提交的任务,其可能存在的作业状态如下:
| 作业状态 | 状态描述 |
|---|---|
| CREATED | 作业刚提交,尚未调度执行 |
| RUNNING | 作业正在运行。作业在执行流程的过程中,流程的每个阶段都会提交一个或多个任务到后端执行。这些阶段可能暂时没有资源,不能运行,处于等待状态。但是作业仍然会处于RUNNING 状态。 |
| COMPLETE | 作业执行完成,没有异常退出。如果流程有很多个阶段,表示每个阶段都正常完成。 |
| FAIL | 作业由于平台原因(例如引用不存在的存储)的一个或者多个阶段执行失败,且用户不可恢复。 |
| CANCELED | 作业被用户取消,作业正在执行且未完成的所有阶段的任务都将会被结束。 |
| PAUSED | 作业被暂停。作业将记住暂停时候的状态,如果用户恢复作业,作业将被恢复为暂停时候的状态继续执行。注意暂停作业时,作业产生的正在运行的任务不会被停止。但是作业将停止调度新的阶段和任务。 |
| PSUDONE | 作业执行部分完成,同时由于某些阶段的失败造成作业无法继续执行的结束状态。 |
对于PSUDONE 可以进行恢复操作。而FAIL 状态的任务,通常分析人员无法直接参与恢复,需要系统管理员介入。
造成作业PSUDONE 状态的原因
通常而言,一个作业PSUDONE 的原因主要有以下几种情况:
- 流程WDL 脚本编写存在错误
- 镜像不存在或镜像中程序路径存在错误
- 计算资源分配不足(如作业内存分配太小)
[!TIP|style:flat]
如果作业参数填写存在错误,则无法进行恢复。
通过Achelous biocli 进行作业恢复
以下面的流程为例
## File name: samtools_view.wdl
task samtoolsview{
File input_sam
command{
samtoolsview ${input_sam} > my.result.bam ## 命令存在错误
}
...
}
该流程对应的作业提交后,由于命令存在错误,会造成作业进入PSUDONE 状态。
此时,首先对WDL 脚本进行修改:
## File name: samtools_view.wdl
task samtoolsview{
File input_sam
command{
samtools view -B ${input_sam} > my.result.bam ## 命令错误已修正
}
...
}
保存后,进行流程的更新
biocli pipeline update [pipeline.json] -d [wdl resource dir]
更新后,对作业进行恢复操作
biocli job recover -i [psudone-job-id]
即可对该作业进行恢复,恢复后的作业会保持前面正常结束的步骤对应结果,由错误步骤处重新运行。
biocli job recover 完整参数说明
biocli job recover 命令支持多种选项,可以灵活地控制恢复行为:
biocli job recover [选项]
| 选项 | 默认值 | 说明 |
|---|---|---|
-i / --id |
* |
指定作业 ID,默认为 * 表示匹配所有 |
-o / --opt |
default |
恢复选项:default(默认方式)或 skippendingstages(跳过等待中的阶段) |
-S / --span |
无 | 按完成时间范围筛选,格式 [2017-06-01 12:00:00, 2017-07-01 12:00:00] |
-p / --pipeline |
"" |
按流程名称筛选 |
-n / --count |
-1 | 指定恢复作业数量 |
-r / --retry_taskid |
无 | 指定重试的 task ID(无论是否已完成),可多次指定 |
-e / --change_epoch |
false | 恢复时变更 WDL 引擎的 epoch |
-c / --recover_cromwell_job |
false | 恢复 Cromwell 作业 |
-f / --file |
无 | Cromwell 源文件 |
-O / --options |
无 | Cromwell 选项 JSON 文件 |
-z / --zipfile |
无 | Cromwell 导入 ZIP 文件 |
使用示例
恢复单个作业
[demo@Cc1Xtcls]$ biocli job recover -i d0a35ca2
恢复指定流程的所有失败作业
[demo@Cc1Xtcls]$ biocli job recover -p demo_pipeline
恢复时跳过等待中的阶段
[demo@Cc1Xtcls]$ biocli job recover -i d0a35ca2 -o skippendingstages
恢复时指定重试特定任务
[demo@Cc1Xtcls]$ biocli job recover -i d0a35ca2 -r paladin-task.a132c6b8
批量恢复指定时间范围内的失败作业
[demo@Cc1Xtcls]$ biocli job recover -S "[2025-01-01 00:00:00, 2025-06-01 00:00:00]" -n 10