You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何便捷查看Snakemake工作流中当前运行的任务?

排查Snakemake工作流阻塞任务的更优方法

我有一个包含75个步骤的Snakemake工作流,此前解决过某步骤等待用户输入导致卡住的问题,但本次运行时工作流再次卡住,无法判断是旧问题复发还是新增步骤耗时过长。我先是将控制台输出复制到文本文件,用以下命令找出未完成的任务:

$ grep "Finished job " ~/Temporary/snakemake_console_output.txt | sort -k 3 -n | cut -d ' ' -f 3 | perl -e 'while(<>){/(\d+)/;$n=$1;if($l && $l+1 != $n){print("$l - $n\n")}$l=$n}'
56 - 62
64 - 68

但结果中部分任务尚未启动,于是又用另一行命令找出当前阻塞的任务:

$ grep -E "Finished job |^\s+jobid:" ~/Temporary/snakemake_console_output.txt | perl -e 'while(<>){if(/Finished job (\d+)/){push(@fin,$1)}elsif(/jobid: (\d+)/){$h->{$1}=0}}foreach my $fj (sort {$a <=> $b} @fin){$n=$fj;if($l && $l+1 != $n){foreach my $rj (($l+1)..($n-1)){print("$rj\n") if(exists($h->{$rj}))}}$l=$n}'
61

最终定位到是新增步骤中一个包含大量安装操作的R脚本导致的阻塞。请问有没有更直接的方法实现这一需求,无需使用上述临时方案?我也尝试过ps命令,但很多任务使用相同工具,还需查看规则文件才能对应到具体规则。


更直接的排查方法

  • 启动工作流时启用实时日志输出
    运行Snakemake时添加--printshellcmds --verbose参数,会实时打印每个任务对应的规则名、jobid以及执行的shell命令,能直接看到当前正在运行的任务所属规则,无需事后分析日志文件。

  • 生成任务依赖图直观分析
    使用snakefile --dag | dot -Tpng > dag.png(需提前安装Graphviz工具)生成任务依赖关系图,通过图形化方式查看任务间的依赖链路,结合当前运行状态可快速定位阻塞点对应的规则。

  • 实时查看Snakemake子进程详情
    先用ps aux | grep snakemake找到Snakemake主进程ID,再用pstree -p <snakemake_pid>查看所有子进程,子进程对应的命令会直接显示当前任务执行的操作,结合规则文件即可快速对应到具体规则。

  • 为每个规则配置独立日志
    在Snakemake规则中添加log参数,示例如下:

    rule my_r_rule:
        input: "data/input.txt"
        output: "results/output.txt"
        log: "logs/my_r_rule.log"
        shell: "Rscript my_script.R {input} {output}"
    

    工作流卡住时,直接查看对应规则的日志文件,就能判断任务是在等待输入还是执行耗时操作。

内容的提问来源于stack exchange,提问作者hepcat72

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 03:10:28