将HEREDOC与SLURM批处理一起使用--wrap

时间:2018-10-30 19:35:05

标签: bash heredoc slurm sbatch

在通过sbatch通过SLURM --wrap提交的(Bash)HEREDOC上,我遇到了困难。

我想要以下工作:

SBATCH_PARAMS=('--nodes=1' '--time=24:00:00' '--mem=64000' '--mail-type=ALL')

sbatch ${SBATCH_PARAMS[@]} --job-name="MWE" -o "MWE.log" --wrap <<EOF
        SLURM_CPUS_ON_NODE=\${SLURM_CPUS_ON_NODE:-8}
        SLURM_CPUS_PER_TASK=\${SLURM_CPUS_PER_TASK:-\$SLURM_CPUS_ON_NODE}
        export OMP_NUM_THREADS=\$SLURM_CPUS_PER_TASK

        parallel --joblog "MWE-jobs.log" --resume --resume-failed -k --linebuffer -j \$((\$OMP_NUM_THREADS/4)) --link "MWE.sh {1} {2}" ::: "./"*R1*.fastq.gz ::: "./"*R2*.fastq.gz
EOF

在我当前的群集上,sbatch返回以下错误,拒绝提交此作业:

ERROR:   option --wrap requires argument

也许有人知道我如何使它工作?

3 个答案:

答案 0 :(得分:1)

由于wrap需要一个字符串参数,因此不能直接使用heredoc。当期望使用不希望创建文件名的文件名时,使用Heredocs。

对于需要cat的文件,请在此处使用heredoc,并将其输出用作--wrap期望的字符串:

SBATCH_PARAMS=('--nodes=1' '--time=24:00:00' '--mem=64000' '--mail-type=ALL')

sbatch ${SBATCH_PARAMS[@]} --job-name="MWE" -o "MWE.log" --wrap $(cat << EOF
        SLURM_CPUS_ON_NODE=\${SLURM_CPUS_ON_NODE:-8}
        SLURM_CPUS_PER_TASK=\${SLURM_CPUS_PER_TASK:-\$SLURM_CPUS_ON_NODE}
        export OMP_NUM_THREADS=\$SLURM_CPUS_PER_TASK

        parallel --joblog "MWE-jobs.log" --resume --resume-failed -k --linebuffer -j \$((\$OMP_NUM_THREADS/4)) --link "MWE.sh {1} {2}" ::: "./"*R1*.fastq.gz ::: "./"*R2*.fastq.gz
EOF)

答案 1 :(得分:1)

只要在其顶部添加wrap,就可以使用不带#!/bin/bash的heredoc。

答案 2 :(得分:0)

在向变量分配HEREDOC时适应related post,但是使用cat(因为我使用errexit并想避免使用working-around the non-zero exit value of the read),所以我能够提交我的工作,如下所示:

CMD_FOR_SUB=$(cat <<EOF
    SLURM_CPUS_ON_NODE=\${SLURM_CPUS_ON_NODE:-8}
    SLURM_CPUS_PER_TASK=\${SLURM_CPUS_PER_TASK:-\$SLURM_CPUS_ON_NODE}
    export OMP_NUM_THREADS=\$SLURM_CPUS_PER_TASK

    parallel --joblog "MWE-jobs.log" --resume --resume-failed -k --linebuffer -j \$((\$OMP_NUM_THREADS/4)) --link "MWE.sh {1} {2}" ::: "./"*R1*.fastq.gz ::: "./"*R2*.fastq.gz
EOF
)

sbatch ${SBATCH_PARAMS[@]} --job-name="MWE" -o "MWE.log" --wrap "$CMD_FOR_SUB"

虽然这确实可行,但我仍然希望使用允许sbatch直接接受HEREDOC的解决方案。