Bonjour,
J'ai un soucis avec mon pipeline Snakemake. Je le lance avec un script bash, tout se passe bien, mais les jobs prennent directement un status "FAILED" quand j'interroge la commande sacct -j JOBID.
J'ai réussi à récupérer un log d'une commande FASTQC et ça donne ceci :
[Fri Jan 27 11:17:00 2023]
Job 30: Fastq-Screen reads contamination checking
fastq_screen -q --threads 8 --conf config/fastq-screen.conf --aligner bwa --subset 1000 resources/reads/*.fastq.gz &> results/11_Reports/quality/fastq-screen.log
/bin/sh: --: invalid option
Usage: /bin/sh [GNU long option] [option] ...
/bin/sh [GNU long option] [option] script-file ...
GNU long options:
--debug
--debugger
--dump-po-strings
--dump-strings
--help
--init-file
--login
--noediting
--noprofile
--norc
--posix
--protected
--rcfile
--rpm-requires
--restricted
--verbose
--version
Shell options:
-irsD or -c command or -O shopt_option (invocation only)
-abefhkmnptuvxBCHP or -o option
Error submitting jobscript (exit code 2):
Voici la rule correspondante dans mon snakefile :
###############################################################################
rule fastqc_quality_control:
# Aim: reads sequence files and produces a quality control report
# Use: fastqc [OPTIONS] --output [DIR/] [SAMPLE_1.fastq] ... [SAMPLE_n.fastq]
message:
"FastQC reads quality controling"
conda:
FASTQC
threads: get_threads('fastqc_quality_control', 8)
input:
fastq = "resources/reads/"
output:
fastqc = directory("results/00_Quality_Control/fastqc/")
log:
"results/11_Reports/quality/fastqc.log"
shell:
"""
mkdir -p {output.fastqc} 2> /dev/null && fastqc --quiet --threads {threads} --outdir {output.fastqc} {input.fastq}/*.fastq.gz &> {log}
"""
###############################################################################
Pour le job suivant (TRIMMOMATIC), j'ai la même chose :
[Fri Jan 27 11:17:06 2023]
Job 19: Trimming reads for SN21_01630
trimmomatic PE -threads 12 -phred33 resources/reads/SN21_01630_R1.fastq.gz resources/reads/SN21_01630_R2.fastq.gz results/01_Trimmimg/trimmomatic/SN21_01630_trimmomatic_R1.fastq.gz results/01_Trimmimg/trimmomatic/SN21_01630_trimmomatic_unpaired_R1.fastq.gz results/01_Trimmimg/trimmomatic/SN21_01630_trimmomatic_R2.fastq.gz results/01_Trimmimg/trimmomatic/SN21_01630_trimmomatic_unpaired_R2.fastq.gz ILLUMINACLIP:resources/adapters/TruSeq2-PE.fa:2:30:15 LEADING:20 TRAILING:3 SLIDINGWINDOW:5:20 AVGQUAL:20 MINLEN:50 &>results/11_Reports/trimmomatic/SN21_01630.log
/bin/sh: --: invalid option
Usage: /bin/sh [GNU long option] [option] ...
/bin/sh [GNU long option] [option] script-file ...
GNU long options:
--debug
--debugger
--dump-po-strings
--dump-strings
--help
--init-file
--login
--noediting
--noprofile
--norc
--posix
--protected
--rcfile
--rpm-requires
--restricted
--verbose
--version
Shell options:
-irsD or -c command or -O shopt_option (invocation only)
-abefhkmnptuvxBCHP or -o option
Error submitting jobscript (exit code 2):
Voici la rule correspondante :
###############################################################################
rule trimmomatic:
# Aim : Trimmomatic: a flexible read trimming tool for Illumina NGS data.
message:
"Trimming reads for {wildcards.sample}"
conda:
TRIMMOMATIC
input:
r1="resources/reads/{sample}_R1.fastq.gz",
r2="resources/reads/{sample}_R2.fastq.gz",
adapters = config["trimmomatic"]["adapters"]["truseq2-pe"]
output:
forward_reads = temp("results/01_Trimmimg/trimmomatic/{sample}_trimmomatic_R1.fastq.gz"),
reverse_reads = temp("results/01_Trimmimg/trimmomatic/{sample}_trimmomatic_R2.fastq.gz"),
forwardUnpaired = temp("results/01_Trimmimg/trimmomatic/{sample}_trimmomatic_unpaired_R1.fastq.gz"),
reverseUnpaired = temp("results/01_Trimmimg/trimmomatic/{sample}_trimmomatic_unpaired_R2.fastq.gz")
log:
"results/11_Reports/trimmomatic/{sample}.log"
params:
seedMisMatches = str(config['trimmomatic']['seedMisMatches']),
palindromeClipTreshold = str(config['trimmomatic']['palindromeClipTreshold']),
simpleClipThreshhold = str(config['trimmomatic']['simpleClipThreshold']),
LeadMinTrimQual = str(config['trimmomatic']['LeadMinTrimQual']),
TrailMinTrimQual = str(config['trimmomatic']['TrailMinTrimQual']),
windowSize = str(config['trimmomatic']['windowSize']),
avgMinQual = str(config['trimmomatic']['avgMinQual']),
minReadLen = str(config['trimmomatic']['minReadLength']),
phred = str(config["trimmomatic"]["phred"])
threads: get_threads('trimmomatic', 8)
shell:
"""
trimmomatic PE -threads {threads} {params.phred} {input.r1} {input.r2} {output.forward_reads} {output.forwardUnpaired} {output.reverse_reads} {output.reverseUnpaired} ILLUMINACLIP:{input.adapters}:{params.seedMisMatches}:{params.palindromeClipTreshold}:{params.simpleClipThreshhold} LEADING:20 TRAILING:3 SLIDINGWINDOW:5:20 AVGQUAL:20 MINLEN:50 &>{log}
"""
###############################################################################
La commande snakemake permettant de lancer les jobs est dans un script bash :
CLUSTER='--account=aedes_amplicon --drmaa " --mem={cluster.mem-per-cpus}, -c {cluster.cpus-per-task} -o {cluster.output} -e {cluster.error}" -jobs 250 --configfile config/config.yaml --cluster-config cluster.yaml --drmaa-log-dir slurm_out'
snakemake
--directory ${workdir}/
--snakefile shave.smk
--jobs=$MAX_JOBS
--config os=${os}
--rerun-incomplete
--keep-going
--use-conda
--conda-frontend conda
--prioritize multiqc
--printshellcmds
--configfile ./config/config.yaml
--cluster-config $CLUSTER_CONFIG
--cluster "$CLUSTER"
Je précise que le script bash lançant la commande snakemake (entre autres), est soumis via la commande sbatch.
Pour accéder au script complet : Start_shave_slurm.sh
Pour accéder au snakefile : shave.smk
Pour accéder au cluster.yaml : cluster.yaml
Merci d'avance pour l'aide apportée.
EDIT : je précise également que les fichiers ont été développés sous VScode sous Mac OS Monterey et sont tous LF et non pas CRLF.
EDIT 2 : j'ai lancé la commande snakemake directement et j'ai le même problème. Le snakefile serait impliqué dans le problème.
Cordialement,