在 SLURM 集群上通过 cron 作业调用 snakemake 时提交作业脚本时出错(退出代码 127)

问题描述 投票:0回答:2

我正在尝试通过 SLURM 集群上的 crontab 运行 snakemake 管道。这是我用来发送给 slurm 的 bash 脚本。

#!/bin/bash
#SBATCH --job-name=nextstrain

snakemake --configfile config.yaml --jobs 100 --keep-going --rerun-incomplete --latency-wait 360 --cluster 'sbatch' -r -p --useconda

此脚本按预期运行。但是,当我这样通过 crontab 运行脚本时:

0 8 * * 1 /bin/bash /home/user/snakemake_automate.sh

我得到错误:

Error submitting jobscript (exit code 127):

我不确定我应该怎么做才能解决这个错误。

cron slurm snakemake sbatch
2个回答
1
投票

退出代码 127 表示未找到命令我怀疑您需要在调用 snakemake 之前加载模块或 conda env。当您以交互方式运行脚本时,它将使用您当前的环境,但通过 cron 它可能不会获取您的 bashrc 或类似文件。


0
投票

您的错误意味着

cron
找不到
sbatch
snakemake
用于将作业脚本提交到 SLURM 集群。

  1. 通过运行
    sbatch
    找到
    which -a sbatch
    所在的位置。这可能会给你:
    $ which -a sbatch
    /usr/local/bin/sbatch
    /usr/bin/sbatch
    
  2. 在调用
    PATH
    之前,将该路径添加到 crontab 中的
    snakemake
    变量:
    export PATH=/usr/bin/:$PATH
    /bin/bash /home/user/snakemake_automate.sh
    
    或者在 bash 脚本本身中(记住 cron 看到的 PATH 变量可能与您作为本地用户看到的非常不同):
    #!/bin/bash
    #SBATCH --job-name=nextstrain
    export PATH=/usr/bin/:$PATH
    snakemake --configfile config.yaml --jobs 100 --keep-going --rerun-incomplete --latency-wait 360 --cluster 'sbatch' -r -p --useconda
    
  3. 要获取更多错误详细信息,请将
    snakemake
    输出重定向到您的
    crontab
    命令中的日志文件:
    0 8 * * 1 /bin/bash /home/user/snakemake_automate.sh > /home/user/snakemake.log 2>&1
    
  4. 在您的 shell 脚本中使用
    set -xeuo pipefail
    以获得更详细的输出也很有帮助。
  5. 您还可以为
    snakemake
    添加额外的参数,例如
    -p
    打印 shell 命令,
    --debug
    --verbose
    .
© www.soinside.com 2019 - 2024. All rights reserved.