Nextflow+Singularity:没有这样的文件或目录,即使文件存在
Nextflow+Singularity: No such file or directory, even though file exists
我正在尝试 运行 这个 pipeline,它是用 Nextflow 实现的,并使用 Docker 容器。不幸的是我不能使用 Docker,因为它不兼容 HPC(没有 sudo),所以我使用 Singularity 而不是 Docker。但是,似乎路径没有正确安装,因为我收到此错误:
Error executing process > 'truncate_input_headers'
Caused by:
Process `truncate_input_headers` terminated with an error exit status (1)
Command executed:
truncate_header.lua < phased.1_scaffolds_FINAL.fasta > truncated.fasta
Command exit status:
1
Command output:
(empty)
Command error:
.command.sh: line 2: phased.1_scaffolds_FINAL.fasta: No such file or directory
Work dir:
/work/project/ladsie_002/work/77/1854982bdacdd60fbe447554ab153b
Tip: you can replicate the issue by changing to the process work dir and entering the command `bash .command.run`
但是,当我查看路径时,文件确实存在:
$ ll /work/project/ladsie_002/work/77/1854982bdacdd60fbe447554ab153b
total 1
lrwxrwxrwx 1 bbrink users 76 30. Aug 13:44 phased.1_scaffolds_FINAL.fasta -> /work/project/ladsie_002/companion/input/pleo/phased.1_scaffolds_FINAL.fasta
这是我的配置:
env {
GT_RETAINIDS = "yes"
AUGUSTUS_CONFIG_PATH = "/opt/data/augustus"
FILTER_SHORT_PARTIALS_RULE = "/opt/data/filters/filter_short_partials.lua"
PFAM = "/opt/pfam/Pfam-A.hmm"
PFAM2GO = "/opt/data/pfam2go/pfam2go.txt"
RATT_CONFIG = "/opt/RATT/RATT.config_euk_NoPseudo_SpliceSite"
}
params.GO_OBO = "/opt/go.obo"
params.NCRNA_MODELS = "/opt/data/cm/rnas.cm"
params.CIRCOS_CONFIG_FILE = "/opt/data/circos/circos.debian.conf"
params.CIRCOS_BIN_CONFIG_FILE = "/opt/data/circos/circos.bin.debian.conf"
params.SPECFILE = "/opt/data/speck/output_check.lua"
params.AUGUSTUS_EXTRINSIC_CFG = "/opt/data/augustus/extrinsic.cfg"
process {
container = 'sangerpathogens/companion:latest'
}
singularity {
enabled = true
// autoMounts = true
}
executor {
name = 'local'
queueSize = 2
pollInterval = '3sec'
}
我试图为此找到解决方案,我唯一能找到的是 autoMounts = true
选项(上面已注释掉),这导致管道甚至找不到它自己的 lua 脚本启用后:
Error executing process > 'truncate_input_headers'
Caused by:
Process `truncate_input_headers` terminated with an error exit status (127)
Command executed:
truncate_header.lua < phased.1_scaffolds_FINAL.fasta > truncated.fasta
Command exit status:
127
Command output:
(empty)
Command error:
.command.sh: line 2: truncate_header.lua: command not found
Work dir:
/work/project/ladsie_002/work/95/f03b31ed18a84f331b83cad0232bd5
Tip: you can try to figure out what's wrong by changing to the process work dir and showing the script file named `.command.sh`
编辑1:
我听从了tsnowlan的建议,将--debug
添加到singularity.engineOptions
。但是,有问题的路径似乎已安装:
Error executing process > 'truncate_input_headers'
Caused by:
Process `truncate_input_headers` terminated with an error exit status (1)
Command executed:
truncate_header.lua < phased.1_scaffolds_FINAL.fasta > truncated.fasta
Command exit status:
1
Command output:
(empty)
Command error:
DEBUG [U=1038,P=29509] mountGeneric() Mounting tmpfs to /var/singularity/mnt/session
DEBUG [U=1038,P=29509] mountImage() Mounting loop device /dev/loop0 to /var/singularity/mnt/session/rootfs
DEBUG [U=1038,P=29509] mountGeneric() Mounting overlay to /var/singularity/mnt/session/final
DEBUG [U=1038,P=29509] setPropagationMount() Set RPC mount propagation flag to SLAVE
VERBOSE [U=1038,P=29509] Passwd() Checking for template passwd file: /var/singularity/mnt/session/rootfs/etc/passwd
VERBOSE [U=1038,P=29509] Passwd() Creating passwd content
VERBOSE [U=1038,P=29509] Passwd() Creating template passwd file and appending user data: /var/singularity/mnt/session/rootfs/etc/passwd
DEBUG [U=1038,P=29509] addIdentityMount() Adding /etc/passwd to mount list
VERBOSE [U=1038,P=29509] addIdentityMount() Default mount: /etc/passwd:/etc/passwd
VERBOSE [U=1038,P=29509] Group() Checking for template group file: /var/singularity/mnt/session/rootfs/etc/group
VERBOSE [U=1038,P=29509] Group() Creating group content
DEBUG [U=1038,P=29509] addIdentityMount() Adding /etc/group to mount list
VERBOSE [U=1038,P=29509] addIdentityMount() Default mount: /etc/group:/etc/group
DEBUG [U=1038,P=29509] mountGeneric() Remounting /var/singularity/mnt/session/final
DEBUG [U=1038,P=29509] mountGeneric() Mounting /dev to /var/singularity/mnt/session/final/dev
DEBUG [U=1038,P=29509] mountGeneric() Mounting /etc/localtime to /var/singularity/mnt/session/final/usr/share/zoneinfo/UTC
DEBUG [U=1038,P=29509] mountGeneric() Mounting /etc/hosts to /var/singularity/mnt/session/final/etc/hosts
DEBUG [U=1038,P=29509] mountGeneric() Mounting /etc/singularity/actions to /var/singularity/mnt/session/final/.singularity.d/actions
DEBUG [U=1038,P=29509] mountGeneric() Remounting /var/singularity/mnt/session/final/.singularity.d/actions
DEBUG [U=1038,P=29509] mountGeneric() Mounting /proc to /var/singularity/mnt/session/final/proc
DEBUG [U=1038,P=29509] mountGeneric() Remounting /var/singularity/mnt/session/final/proc
DEBUG [U=1038,P=29509] mountGeneric() Mounting sysfs to /var/singularity/mnt/session/final/sys
DEBUG [U=1038,P=29509] mountGeneric() Mounting /home/bbrink to /var/singularity/mnt/session/home/bbrink
DEBUG [U=1038,P=29509] mountGeneric() Remounting /var/singularity/mnt/session/home/bbrink
DEBUG [U=1038,P=29509] mountGeneric() Mounting /var/singularity/mnt/session/home/bbrink to /var/singularity/mnt/session/final/home/bbrink
DEBUG [U=1038,P=29509] mountGeneric() Remounting /var/singularity/mnt/session/final/home/bbrink
DEBUG [U=1038,P=29509] mountGeneric() Mounting /tmp to /var/singularity/mnt/session/final/tmp
DEBUG [U=1038,P=29509] mountGeneric() Remounting /var/singularity/mnt/session/final/tmp
DEBUG [U=1038,P=29509] mountGeneric() Mounting /var/tmp to /var/singularity/mnt/session/final/var/tmp
DEBUG [U=1038,P=29509] mountGeneric() Remounting /var/singularity/mnt/session/final/var/tmp
DEBUG [U=1038,P=29509] mountGeneric() Mounting /work/project/ladsie_002/work/de/74a8bbd8bd11ad1524800fb7e71556 to /var/singularity/mnt/session/final/work/project/ladsie_002/work/de/74a8bbd8bd11ad1524800fb7e71556
DEBUG [U=1038,P=29509] mountGeneric() Remounting /var/singularity/mnt/session/final/work/project/ladsie_002/work/de/74a8bbd8bd11ad1524800fb7e71556
DEBUG [U=1038,P=29509] mountGeneric() Mounting /var/singularity/mnt/session/etc/resolv.conf to /var/singularity/mnt/session/final/etc/resolv.conf
DEBUG [U=1038,P=29509] mountGeneric() Mounting /var/singularity/mnt/session/etc/passwd to /var/singularity/mnt/session/final/etc/passwd
DEBUG [U=1038,P=29509] mountGeneric() Mounting /var/singularity/mnt/session/etc/group to /var/singularity/mnt/session/final/etc/group
DEBUG [U=1038,P=29509] create() Chroot into /var/singularity/mnt/session/final
DEBUG [U=0,P=29543] Chroot() Change current directory to /var/singularity/mnt/session/final
DEBUG [U=0,P=29543] Chroot() Hold reference to host / directory
DEBUG [U=0,P=29543] Chroot() Called pivot_root on /var/singularity/mnt/session/final
DEBUG [U=0,P=29543] Chroot() Change current directory to host / directory
DEBUG [U=0,P=29543] Chroot() Apply slave mount propagation for host / directory
DEBUG [U=0,P=29543] Chroot() Called unmount(/, syscall.MNT_DETACH)
DEBUG [U=0,P=29543] Chroot() Changing directory to / to avoid getpwd issues
DEBUG [U=1038,P=29509] create() Chdir into / to avoid errors
VERBOSE [U=1038,P=29542] startup() Execute stage 2
DEBUG [U=1038,P=29542] Stage() Entering stage 2
DEBUG [U=1038,P=29509] PostStartProcess() Post start process
.command.sh: line 2: phased.1_scaffolds_FINAL.fasta: No such file or directory
DEBUG [U=1038,P=29509] CleanupContainer() Cleanup container
DEBUG [U=1038,P=29509] Master() Child exited with exit status 1
Work dir:
/work/project/ladsie_002/work/de/74a8bbd8bd11ad1524800fb7e71556
编辑2:
我修复了错误的挂载点,这导致了另一个错误:
gt: error: could not execute script ...rk/project/ladsie_002/companion/bin/gff3_to_embl.lua:74: bad argument #1 to 'lines' (/opt/go.obo: Permission denied)
估计容器里面的权限没有设置正确
Singulary 可能无法正确转换用户环境定义的 Docker 容器。确保 Singularity 图像定义 PATH
和项目 Docker 文件 https://github.com/sanger-pathogens/companion/blob/master/Dockerfile#L107
中定义的其他变量
如pditommaso所述,您需要确保正确设置奇点图像内的环境。您可以通过 Singularity 定义文件中的 %environment
块或在主机环境中导出 SINGULARITY_$VARNAME
来执行此操作。例如,SINGULARITY_PERL5LIB=/opt/ORTHOMCLV1.4/:/opt/RATT/:/opt/ABACAS2/:$PERL5LIB
在 nextflow 配置的 env
块中设置容器内的 PERL5LIB
变量。
您还可能需要指定要装载到 singularity.runOptions
容器中的数据的位置。具体细节取决于您使用的是哪个版本的 Singularity 以及主机 OS 是否在其内核中启用了 OverlayFS。
编辑 1:binding/mounting
基本形式是-B /host/path:/image/path
。如果 /image/path
在奇点图像中不存在,并且 OS 内核中未启用 OverlayFS,您将收到错误消息:WARNING: Skipping user bind, non existent bind point (directory/file) in container: '/image/path'
。 directory/file
是正在安装的内容。
您可以通过在版本 3+ 中使用 --debug
标志或在版本 2 中使用 -vv
查看正在安装的内容。在 nextflow 中,它被添加到 singularity.engineOptions
。
请注意,如果挂载目录中的任何符号链接引用了奇点图像中不可用的路径,它们都将被破坏。
如果挂载的数据包含符号链接,当奇点图像为 运行.
时,它们很有可能引用未挂载到容器中的文件并且看起来是断开的链接
编辑 2:文件权限
构建奇点图像的最简单方法是sudo singularity build companion.sif docker://sangerpathogens/companion:latest
。如果您需要修改任何内容,例如 /opt/go.obo
文件,您需要创建一个定义文件。
Bootstrap: docker
From: sangerpathogens/companion:latest
# note: for reproducibility, it is best to use a tag whose target won't change over time
%post
chmod 644 /opt/go.obo
如果需要任何其他更改,它们将进入 %post
块。与 Docker 不同,singularity 不使用每个命令的图层来创建图像,因此您不必担心链接 some_command && some_other_command && so_on && etc
.
此修复将有助于解决 truncate_headers.lua 脚本不存在的问题。
我正在尝试 运行 这个 pipeline,它是用 Nextflow 实现的,并使用 Docker 容器。不幸的是我不能使用 Docker,因为它不兼容 HPC(没有 sudo),所以我使用 Singularity 而不是 Docker。但是,似乎路径没有正确安装,因为我收到此错误:
Error executing process > 'truncate_input_headers'
Caused by:
Process `truncate_input_headers` terminated with an error exit status (1)
Command executed:
truncate_header.lua < phased.1_scaffolds_FINAL.fasta > truncated.fasta
Command exit status:
1
Command output:
(empty)
Command error:
.command.sh: line 2: phased.1_scaffolds_FINAL.fasta: No such file or directory
Work dir:
/work/project/ladsie_002/work/77/1854982bdacdd60fbe447554ab153b
Tip: you can replicate the issue by changing to the process work dir and entering the command `bash .command.run`
但是,当我查看路径时,文件确实存在:
$ ll /work/project/ladsie_002/work/77/1854982bdacdd60fbe447554ab153b
total 1
lrwxrwxrwx 1 bbrink users 76 30. Aug 13:44 phased.1_scaffolds_FINAL.fasta -> /work/project/ladsie_002/companion/input/pleo/phased.1_scaffolds_FINAL.fasta
这是我的配置:
env {
GT_RETAINIDS = "yes"
AUGUSTUS_CONFIG_PATH = "/opt/data/augustus"
FILTER_SHORT_PARTIALS_RULE = "/opt/data/filters/filter_short_partials.lua"
PFAM = "/opt/pfam/Pfam-A.hmm"
PFAM2GO = "/opt/data/pfam2go/pfam2go.txt"
RATT_CONFIG = "/opt/RATT/RATT.config_euk_NoPseudo_SpliceSite"
}
params.GO_OBO = "/opt/go.obo"
params.NCRNA_MODELS = "/opt/data/cm/rnas.cm"
params.CIRCOS_CONFIG_FILE = "/opt/data/circos/circos.debian.conf"
params.CIRCOS_BIN_CONFIG_FILE = "/opt/data/circos/circos.bin.debian.conf"
params.SPECFILE = "/opt/data/speck/output_check.lua"
params.AUGUSTUS_EXTRINSIC_CFG = "/opt/data/augustus/extrinsic.cfg"
process {
container = 'sangerpathogens/companion:latest'
}
singularity {
enabled = true
// autoMounts = true
}
executor {
name = 'local'
queueSize = 2
pollInterval = '3sec'
}
我试图为此找到解决方案,我唯一能找到的是 autoMounts = true
选项(上面已注释掉),这导致管道甚至找不到它自己的 lua 脚本启用后:
Error executing process > 'truncate_input_headers'
Caused by:
Process `truncate_input_headers` terminated with an error exit status (127)
Command executed:
truncate_header.lua < phased.1_scaffolds_FINAL.fasta > truncated.fasta
Command exit status:
127
Command output:
(empty)
Command error:
.command.sh: line 2: truncate_header.lua: command not found
Work dir:
/work/project/ladsie_002/work/95/f03b31ed18a84f331b83cad0232bd5
Tip: you can try to figure out what's wrong by changing to the process work dir and showing the script file named `.command.sh`
编辑1:
我听从了tsnowlan的建议,将--debug
添加到singularity.engineOptions
。但是,有问题的路径似乎已安装:
Error executing process > 'truncate_input_headers'
Caused by:
Process `truncate_input_headers` terminated with an error exit status (1)
Command executed:
truncate_header.lua < phased.1_scaffolds_FINAL.fasta > truncated.fasta
Command exit status:
1
Command output:
(empty)
Command error:
DEBUG [U=1038,P=29509] mountGeneric() Mounting tmpfs to /var/singularity/mnt/session
DEBUG [U=1038,P=29509] mountImage() Mounting loop device /dev/loop0 to /var/singularity/mnt/session/rootfs
DEBUG [U=1038,P=29509] mountGeneric() Mounting overlay to /var/singularity/mnt/session/final
DEBUG [U=1038,P=29509] setPropagationMount() Set RPC mount propagation flag to SLAVE
VERBOSE [U=1038,P=29509] Passwd() Checking for template passwd file: /var/singularity/mnt/session/rootfs/etc/passwd
VERBOSE [U=1038,P=29509] Passwd() Creating passwd content
VERBOSE [U=1038,P=29509] Passwd() Creating template passwd file and appending user data: /var/singularity/mnt/session/rootfs/etc/passwd
DEBUG [U=1038,P=29509] addIdentityMount() Adding /etc/passwd to mount list
VERBOSE [U=1038,P=29509] addIdentityMount() Default mount: /etc/passwd:/etc/passwd
VERBOSE [U=1038,P=29509] Group() Checking for template group file: /var/singularity/mnt/session/rootfs/etc/group
VERBOSE [U=1038,P=29509] Group() Creating group content
DEBUG [U=1038,P=29509] addIdentityMount() Adding /etc/group to mount list
VERBOSE [U=1038,P=29509] addIdentityMount() Default mount: /etc/group:/etc/group
DEBUG [U=1038,P=29509] mountGeneric() Remounting /var/singularity/mnt/session/final
DEBUG [U=1038,P=29509] mountGeneric() Mounting /dev to /var/singularity/mnt/session/final/dev
DEBUG [U=1038,P=29509] mountGeneric() Mounting /etc/localtime to /var/singularity/mnt/session/final/usr/share/zoneinfo/UTC
DEBUG [U=1038,P=29509] mountGeneric() Mounting /etc/hosts to /var/singularity/mnt/session/final/etc/hosts
DEBUG [U=1038,P=29509] mountGeneric() Mounting /etc/singularity/actions to /var/singularity/mnt/session/final/.singularity.d/actions
DEBUG [U=1038,P=29509] mountGeneric() Remounting /var/singularity/mnt/session/final/.singularity.d/actions
DEBUG [U=1038,P=29509] mountGeneric() Mounting /proc to /var/singularity/mnt/session/final/proc
DEBUG [U=1038,P=29509] mountGeneric() Remounting /var/singularity/mnt/session/final/proc
DEBUG [U=1038,P=29509] mountGeneric() Mounting sysfs to /var/singularity/mnt/session/final/sys
DEBUG [U=1038,P=29509] mountGeneric() Mounting /home/bbrink to /var/singularity/mnt/session/home/bbrink
DEBUG [U=1038,P=29509] mountGeneric() Remounting /var/singularity/mnt/session/home/bbrink
DEBUG [U=1038,P=29509] mountGeneric() Mounting /var/singularity/mnt/session/home/bbrink to /var/singularity/mnt/session/final/home/bbrink
DEBUG [U=1038,P=29509] mountGeneric() Remounting /var/singularity/mnt/session/final/home/bbrink
DEBUG [U=1038,P=29509] mountGeneric() Mounting /tmp to /var/singularity/mnt/session/final/tmp
DEBUG [U=1038,P=29509] mountGeneric() Remounting /var/singularity/mnt/session/final/tmp
DEBUG [U=1038,P=29509] mountGeneric() Mounting /var/tmp to /var/singularity/mnt/session/final/var/tmp
DEBUG [U=1038,P=29509] mountGeneric() Remounting /var/singularity/mnt/session/final/var/tmp
DEBUG [U=1038,P=29509] mountGeneric() Mounting /work/project/ladsie_002/work/de/74a8bbd8bd11ad1524800fb7e71556 to /var/singularity/mnt/session/final/work/project/ladsie_002/work/de/74a8bbd8bd11ad1524800fb7e71556
DEBUG [U=1038,P=29509] mountGeneric() Remounting /var/singularity/mnt/session/final/work/project/ladsie_002/work/de/74a8bbd8bd11ad1524800fb7e71556
DEBUG [U=1038,P=29509] mountGeneric() Mounting /var/singularity/mnt/session/etc/resolv.conf to /var/singularity/mnt/session/final/etc/resolv.conf
DEBUG [U=1038,P=29509] mountGeneric() Mounting /var/singularity/mnt/session/etc/passwd to /var/singularity/mnt/session/final/etc/passwd
DEBUG [U=1038,P=29509] mountGeneric() Mounting /var/singularity/mnt/session/etc/group to /var/singularity/mnt/session/final/etc/group
DEBUG [U=1038,P=29509] create() Chroot into /var/singularity/mnt/session/final
DEBUG [U=0,P=29543] Chroot() Change current directory to /var/singularity/mnt/session/final
DEBUG [U=0,P=29543] Chroot() Hold reference to host / directory
DEBUG [U=0,P=29543] Chroot() Called pivot_root on /var/singularity/mnt/session/final
DEBUG [U=0,P=29543] Chroot() Change current directory to host / directory
DEBUG [U=0,P=29543] Chroot() Apply slave mount propagation for host / directory
DEBUG [U=0,P=29543] Chroot() Called unmount(/, syscall.MNT_DETACH)
DEBUG [U=0,P=29543] Chroot() Changing directory to / to avoid getpwd issues
DEBUG [U=1038,P=29509] create() Chdir into / to avoid errors
VERBOSE [U=1038,P=29542] startup() Execute stage 2
DEBUG [U=1038,P=29542] Stage() Entering stage 2
DEBUG [U=1038,P=29509] PostStartProcess() Post start process
.command.sh: line 2: phased.1_scaffolds_FINAL.fasta: No such file or directory
DEBUG [U=1038,P=29509] CleanupContainer() Cleanup container
DEBUG [U=1038,P=29509] Master() Child exited with exit status 1
Work dir:
/work/project/ladsie_002/work/de/74a8bbd8bd11ad1524800fb7e71556
编辑2: 我修复了错误的挂载点,这导致了另一个错误:
gt: error: could not execute script ...rk/project/ladsie_002/companion/bin/gff3_to_embl.lua:74: bad argument #1 to 'lines' (/opt/go.obo: Permission denied)
估计容器里面的权限没有设置正确
Singulary 可能无法正确转换用户环境定义的 Docker 容器。确保 Singularity 图像定义 PATH
和项目 Docker 文件 https://github.com/sanger-pathogens/companion/blob/master/Dockerfile#L107
如pditommaso所述,您需要确保正确设置奇点图像内的环境。您可以通过 Singularity 定义文件中的 %environment
块或在主机环境中导出 SINGULARITY_$VARNAME
来执行此操作。例如,SINGULARITY_PERL5LIB=/opt/ORTHOMCLV1.4/:/opt/RATT/:/opt/ABACAS2/:$PERL5LIB
在 nextflow 配置的 env
块中设置容器内的 PERL5LIB
变量。
您还可能需要指定要装载到 singularity.runOptions
容器中的数据的位置。具体细节取决于您使用的是哪个版本的 Singularity 以及主机 OS 是否在其内核中启用了 OverlayFS。
编辑 1:binding/mounting
基本形式是-B /host/path:/image/path
。如果 /image/path
在奇点图像中不存在,并且 OS 内核中未启用 OverlayFS,您将收到错误消息:WARNING: Skipping user bind, non existent bind point (directory/file) in container: '/image/path'
。 directory/file
是正在安装的内容。
您可以通过在版本 3+ 中使用 --debug
标志或在版本 2 中使用 -vv
查看正在安装的内容。在 nextflow 中,它被添加到 singularity.engineOptions
。
请注意,如果挂载目录中的任何符号链接引用了奇点图像中不可用的路径,它们都将被破坏。
如果挂载的数据包含符号链接,当奇点图像为 运行.
时,它们很有可能引用未挂载到容器中的文件并且看起来是断开的链接编辑 2:文件权限
构建奇点图像的最简单方法是sudo singularity build companion.sif docker://sangerpathogens/companion:latest
。如果您需要修改任何内容,例如 /opt/go.obo
文件,您需要创建一个定义文件。
Bootstrap: docker
From: sangerpathogens/companion:latest
# note: for reproducibility, it is best to use a tag whose target won't change over time
%post
chmod 644 /opt/go.obo
如果需要任何其他更改,它们将进入 %post
块。与 Docker 不同,singularity 不使用每个命令的图层来创建图像,因此您不必担心链接 some_command && some_other_command && so_on && etc
.
此修复将有助于解决 truncate_headers.lua 脚本不存在的问题。