Creating SLURM job submission scripts
For a quick list of frequently used SLURM commands/options, take a look at this cheat sheet. This guide will show you how to generate SLURM job submission scripts for your commands, easily and efficiently!
1. Generate commands
We recommend using our run scripts. Run scripts are configured to run frequently used programs with settings that are tailored to fit our needs. The idea is to make it simple to run frequently used programs without having to read the entire manual. Some of the common run scripts are runBWA.sh
, runGSNAP.sh
, runBLASTn
etc. Here we will take runBLASTn.sh as an example, but you can use this for almost any of the other run scripts as well as your own commands. First, lets generate the commands:
We have 5 fasta files: file1.fsa
, file2.fsa
, file3.fsa
, file4.fsa
and file5.fsa
(each with 1000 sequences) for which we need to run BLAST against nr
database, we will generate the commands as follows:
for file in file?.fsa; do
echo "./runBLASTn.sh $file;
done > blastn.cmds
2. Create submission files
The blastn.cmds
now contains 5 lines, each set to run blastn on each of the file. To create slurm script for each one of these lines, we run the makeSLURMs.sh script as follows:
makeSLURMs.py 1 blastn.cmds
Here 1 is to tell that put one job per submission file, and blastn.cmds
is the commands file that looks like this:
./runBLASTn.sh file1.fsa
./runBLASTn.sh file2.fsa
./runBLASTn.sh file3.fsa
./runBLASTn.sh file4.fsa
./runBLASTn.sh file5.fsa
Once the makeSLURMs.py
command is run, you should see 5 .slurm
files, each identified by numbers and the command file prefix. The content should look like this:
#!/bin/bash
#SBATCH -N 1
#SBATCH --ntasks-per-node=16
#SBATCH -t 96:00:00
#SBATCH -J blastn_1
#SBATCH -o blastn_1.o%j
#SBATCH -e blastn_1.e%j
#SBATCH --mail-user=${USER}@iastate.edu
#SBATCH --mail-type=begin
#SBATCH --mail-type=end
cd $SLURM_SUBMIT_DIR
ulimit -s unlimited
module use /work/GIF/software/modules
./runBLASTn.sh file1.fsa
scontrol show job $SLURM_JOB_ID
3. Submit the jobs
The next step is to submit the jobs to the cluster. Using the for loop
for f in blastn*.slurm; do
sbatch $f;
done
All commands will be submitted and will start to run as per the availability of nodes.