Bash 在SLURM上运行接受命令行参数的命令

Bash 在SLURM上运行接受命令行参数的命令,bash,hpc,slurm,Bash,Hpc,Slurm,我对使用HPCs和SLURM是完全陌生的,所以我非常感谢这里的指导 我需要迭代运行一个如下所示的命令 kallisto quant -i '/home/myName/genomes/hSapien.idx' \ -o "output-SRR3225412" \ "SRR3225412_1.fastq.gz" \

我对使用HPCs和SLURM是完全陌生的,所以我非常感谢这里的指导

我需要迭代运行一个如下所示的命令

kallisto quant -i '/home/myName/genomes/hSapien.idx' \
               -o "output-SRR3225412"                 \
                         "SRR3225412_1.fastq.gz"       \
                         "SRR3225412_2.fastq.gz"
其中,
SRR3225412
零件在每个交互中都不同

问题是,正如我所发现的,我不能仅仅将它附加到
sbatch
命令的末尾

sbatch --nodes=1          \
       --ntasks-per-node=1 \
       --cpus-per-task=1    \
         kallisto quant -i '/home/myName/genomes/hSapien.idx' \
                        -o "output-SRR3225412"                 \
                                  "SRR3225412_1.fastq.gz"       \
                                  "SRR3225412_2.fastq.gz"
这个命令不起作用。我得到了错误

sbatch: error: This does not look like a batch script.  The first
sbatch: error: line must start with #! followed by the path to an interpreter.
sbatch: error: For instance: #!/bin/sh
我想问,如何运行
sbatch
命令,指定其运行参数,并为我尝试使用的
kallisto
程序添加命令行参数?最后,我想要一个

#!/bin/bash

for sample in ...
do
    sbatch --nodes=1          \
           --ntasks-per-node=1 \
           --cpus-per-task=1    \
             kallistoCommandOnSample --arg1 a1 \
                                     --arg2 a2 arg3 a3
done

错误
sbatch:error:这看起来不像批处理脚本。
是因为
sbatch
需要提交脚本。它是一个批处理脚本,通常是Bash脚本,其中以
#SBATCH
开头的注释由Slurm解释为选项

因此,提交作业的典型方式是创建一个文件,我们将其命名为
submit.sh

#! /bin/bash
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=1

kallisto quant -i '/home/myName/genomes/hSapien.idx' \
               -o "output-SRR3225412"                 \
                         "SRR3225412_1.fastq.gz"       \
                         "SRR3225412_2.fastq.gz"
然后随信提交

sbatch submit.sh
如果您有多个类似的作业要提交,那么出于几个原因使用。要创建的循环可以替换为一个提交脚本,如下所示

#! /bin/bash
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=1
#SBATCH --array=1-10 # Replace here with the number of iterations in the loop

SAMPLES=(...) # here put what you would loop over
CURRSAMPLE=${SAMPLE[$SLURM_ARRAY_TASK_ID]}
kallisto quant -i '/home/myName/genomes/hSapien.idx' \
               -o "output-${CURRSAMPLE}"              \
                         "${CURRSAMPLE}_1.fastq.gz"    \
                         "${CURRSAMPLE}_2.fastq.gz"
正如@Carles Fenoy所指出的,如果您不想使用提交脚本,可以使用
sbatch
--wrap
参数:

sbatch --nodes=1          \
       --ntasks-per-node=1 \
       --cpus-per-task=1    \
       --wrap "kallisto quant -i '/home/myName/genomes/hSapien.idx' \
                              -o 'output-SRR3225412'                 \
                                        'SRR3225412_1.fastq.gz'       \
                                        'SRR3225412_2.fastq.gz'"

这回答了你的问题吗?