Slurm脚本出现“command not found”错误。

3

我正在尝试向Slurm提交一个脚本,用于在输入文件上运行m4。我们的集群上安装了m4,如果我单独运行该脚本,则一切正常。但是当我通过Slurm脚本提交运行时,出现错误。

以下是我想要运行的脚本(名为m4it.sh)。
[请注意,我正在打印PATH和SHELL以尝试进行调试。]

#!/usr/bin/env bash

echo "Beginning m4it.sh"
echo "PATH=$PATH"
echo "SHELL=$SHELL"
echo

m4 file.m4 > fileout.txt

以下是我的 slurm 脚本:

#!/usr/bin/env bash
#
#SBATCH --job-name=m4it

### Account name (req'd)
#SBATCH --account=MyAccount

### Redirect .o and .e files to the logs dir
#SBATCH -o m4it.out
#SBATCH -e m4it.err
#
#SBATCH --ntasks=1
#SBATCH --time=00:01:00
#SBATCH --mem-per-cpu=125

echo "PATH=$PATH"
echo "SHELL=$SHELL"
echo 
echo "running m4it.sh"
echo
./m4it.sh

通过以下方式成功提交到Slurm

sbatch m4it.slurm

当程序执行时,我在m4it.err日志文件中收到以下错误信息:
./m4it.sh: line 8: m4: command not found

PATH和SHELL变量(由m4it.slurm和m4it.sh脚本打印到m4it.out)是相同的。 PATH包含我登录时的PATH,而SHELL是/bin/bash,正如预期的那样。

即使我在我PATH中的一个目录中包含了一个指向m4可执行文件的符号链接,我仍然会遇到这个错误。此外,问题不仅仅是m4。脚本将会报告"apropos"命令为未知命令,尽管它在命令行上运行良好。但是脚本可以正常地进行"cd"和"ls"操作。

我已经检查了读/写/执行权限。

ls -ld / /usr /usr/bin /usr/bin/m4 

产生以下结果:
dr-xr-xr-x. 30 root root   4096 Apr  8 11:11 /
drwxr-xr-x. 14 root root   4096 Feb 17 20:24 /usr
dr-xr-xr-x.  2 root root  36864 Apr 29 11:14 /usr/bin
-rwxr-xr-x   1 root root 212440 Jun  3  2010 /usr/bin/m4

看起来m4it.sh脚本执行的节点与前置节点不同,某些信息(环境变量或路径)未能传递过来。我还尝试使用参数--export=ALL导出所有设置,如下:

sbatch m4it.slurm --export=ALL

但这也没有起作用(结果相同)。 有人可以帮忙吗?


1
which m4 的输出是什么? - Cyrus
在命令行中,“which m4”返回/usr/bin/m4。我将“which m4”添加到.sh和.slurm脚本中。我在.out文件中没有得到任何回应,在.err文件中,它说“which: no m4 in (/....all of the directories in my PATH.../)”。奇怪的是,/usr/bin在我的PATH中。我放置m4符号链接的目录也是如此。 - Madeleine P. Vincent
2
哪个用户运行m4it.sh?请在您的问题中添加ls -ld / /usr /usr/bin /usr/bin/m4的输出。 - Cyrus
ls 的输出已经在问题上方添加。我不确定谁执行 m4it.sh,但我猜测是 slurm 守护进程解释了 m4it.slurm 脚本。 - Madeleine P. Vincent
@CarlesFenoy 是的,在脚本中,“ls”命令可以正常工作。也许计算节点没有安装m4,但我的PATH变量包括/usr/bin/路径和我家目录下的bin目录,其中还包括一个指向m4的符号链接。 - Madeleine P. Vincent
显示剩余2条评论
1个回答

3
我能够进入计算节点进行交互式会话。实际上,该节点的/usr/bin与前端节点显著不同,而且没有安装m4。
这也解释了为什么我的PATH中某个目录的符号链接不再起作用。它指向/usr/bin/m4,但是一旦在该计算节点上执行作业,/usr/bin/m4就不再存在,因此符号链接无效。
如果我想使用m4,则解决方案是要求管理员在计算节点上安装m4,或者将可执行文件的本地版本复制到我的主目录中存在于PATH变量中的某个位置。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接