我正在尝试通过 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):
我不确定我应该怎么做才能解决这个错误。
退出代码 127 表示未找到命令我怀疑您需要在调用 snakemake 之前加载模块或 conda env。当您以交互方式运行脚本时,它将使用您当前的环境,但通过 cron 它可能不会获取您的 bashrc 或类似文件。
您的错误意味着
cron
找不到 sbatch
,snakemake
用于将作业脚本提交到 SLURM 集群。
sbatch
找到which -a sbatch
所在的位置。这可能会给你:
$ which -a sbatch
/usr/local/bin/sbatch
/usr/bin/sbatch
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
snakemake
输出重定向到您的 crontab
命令中的日志文件:
0 8 * * 1 /bin/bash /home/user/snakemake_automate.sh > /home/user/snakemake.log 2>&1
set -xeuo pipefail
以获得更详细的输出也很有帮助。snakemake
添加额外的参数,例如 -p
打印 shell 命令,--debug
和 --verbose
.