我正在PBS集群(PBSpro)上部署snakemake工作流程。我遇到了一个问题,即由于缺少shell命令的参数/操作数,在集群节点上运行的shell命令失败。下面是一个可以重现我所看到的行为的最小例子:
rule all:
input: 'foo.txt'
rule run_foo:
output: 'foo.txt'
shell: 'touch {output}'
从命令行运行:
snakemake all
工作流程运行完成,没有任何错误。但是,从命令行运行:
snakemake all --jobs 1 --cluster "qsub -l select=1:ncpus=1 -l walltime=00:05:00 -A $PROJECT -q share -j oe"
工作流程失败,并生成一个群集日志,如下所示:
Error: Image not found
Error in job run_foo while creating output file foo.txt.
RuleException:
CalledProcessError in line 7 of /glade2/scratch2/jhamman/Snakefile:
Command 'touch foo.txt' returned non-zero exit status 1.
File "/glade2/scratch2/jhamman/Snakefile", line 7, in __rule_run_foo
File "/glade/u/home/jhamman/anaconda/envs/storylines/lib/python3.6/concurrent/futures/thread.py", line 56, in run
Exiting because a job execution failed. Look above for error message
似乎正在发生的事情是该命令的参数(在这种情况下为touch
)未应用,尽管列出了回溯。
有没有通过我发现的snakemake将shell命令传递给集群的技巧?
答案 0 :(得分:0)
事实证明,我使用的是相当旧版本的snakemake。出于某种原因,康达已经固定了我的版本。无论如何,手动升级到最新稳定版本的snakemake似乎已经解决了这个问题。