如果规则的 shell 命令是集群作业,Snakemake 可以工作吗?
Can Snakemake work if a rule's shell command is a cluster job?
在下面的示例中,如果 shell 脚本 shell_script.sh
向集群发送作业,是否可以让 snakemake 知道该集群作业已完成?也就是说,首先,文件 a
应该由 shell_script.sh
创建,它将自己的作业发送到集群,然后一旦这个集群作业完成,文件 b
应该被创建。
为简单起见,我们假设 snakemake 是 运行 本地的,这意味着唯一的集群作业来自 shell_script.sh
而不是 snakemake 。
localrules: that_job
rule all:
input:
"output_from_shell_script.txt",
"file_after_cluster_job.txt"
rule that_job:
output:
a = "output_from_shell_script.txt",
b = "file_after_cluster_job.txt"
shell:
"""
shell_script.sh {output.a}
touch {output.b}
"""
PS - 目前,我正在使用 sleep
命令在作业 "completed" 之前给它一个等待时间。但这是一个糟糕的解决方法,因为这可能会引起几个问题。
Snakemake 可以使用命令行上的 --cluster
参数为您管理。
您可以为要在集群上执行的作业提供模板。
作为示例,以下是我如何在 SGE 管理的集群上使用 snakemake:
模板,它将封装我调用的作业 sge.sh
:
#$ -S /bin/bash
#$ -cwd
#$ -V
{exec_job}
那我直接在登录节点上使用:
snakemake -rp --cluster "qsub -e ./logs/ -o ./logs/" -j 20 --jobscript sge.sh --latency-wait 30
--cluster
将告知使用哪个排队系统
--jobscript
是封装作业的模板
如果文件系统需要一些时间来写入文件,--latency-wait
很重要。您的作业可能会在规则的输出对文件系统实际可见之前 return 结束,这将导致错误
注意在Snakefile中可以通过关键字localrules:
指定不在节点上执行的规则
否则,根据您的排队系统,存在一些等待发送到集群的作业完成的选项:
上金所:
Wait for set of qsub jobs to complete
咕噜咕噜:
低频光纤:
https://superuser.com/questions/46312/wait-for-one-or-all-lsf-jobs-to-complete
在下面的示例中,如果 shell 脚本 shell_script.sh
向集群发送作业,是否可以让 snakemake 知道该集群作业已完成?也就是说,首先,文件 a
应该由 shell_script.sh
创建,它将自己的作业发送到集群,然后一旦这个集群作业完成,文件 b
应该被创建。
为简单起见,我们假设 snakemake 是 运行 本地的,这意味着唯一的集群作业来自 shell_script.sh
而不是 snakemake 。
localrules: that_job
rule all:
input:
"output_from_shell_script.txt",
"file_after_cluster_job.txt"
rule that_job:
output:
a = "output_from_shell_script.txt",
b = "file_after_cluster_job.txt"
shell:
"""
shell_script.sh {output.a}
touch {output.b}
"""
PS - 目前,我正在使用 sleep
命令在作业 "completed" 之前给它一个等待时间。但这是一个糟糕的解决方法,因为这可能会引起几个问题。
Snakemake 可以使用命令行上的 --cluster
参数为您管理。
您可以为要在集群上执行的作业提供模板。
作为示例,以下是我如何在 SGE 管理的集群上使用 snakemake:
模板,它将封装我调用的作业 sge.sh
:
#$ -S /bin/bash
#$ -cwd
#$ -V
{exec_job}
那我直接在登录节点上使用:
snakemake -rp --cluster "qsub -e ./logs/ -o ./logs/" -j 20 --jobscript sge.sh --latency-wait 30
--cluster
将告知使用哪个排队系统
--jobscript
是封装作业的模板
如果文件系统需要一些时间来写入文件,--latency-wait
很重要。您的作业可能会在规则的输出对文件系统实际可见之前 return 结束,这将导致错误
注意在Snakefile中可以通过关键字localrules:
否则,根据您的排队系统,存在一些等待发送到集群的作业完成的选项:
上金所:
Wait for set of qsub jobs to complete
咕噜咕噜:
低频光纤:
https://superuser.com/questions/46312/wait-for-one-or-all-lsf-jobs-to-complete