我试图向slurm提交一个脚本,该脚本在输入文件上运行m4。m4安装在我们的集群上,如果我自己运行脚本,一切都会按预期工作。但是当我通过slurm脚本向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
这是我的剧本:
#!/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
它通过
sbatch m4it.slurm
当它执行时,我在m4it.err日志文件中得到以下错误:
./m4it.sh: line 8: m4: command not found
path和shell变量(由m4it.slurm和m4it.sh脚本打印到m4it.out)是相同的。该路径包含我登录时的路径,shell如预期的那样是/bin/bash。
即使我在路径中的目录中包含指向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
但这也不起作用(同样的结果)。
有人能帮忙吗?
最佳答案
我能够在交互会话中登录到计算节点。实际上,该节点的/usr/bin与前节点的/usr/bin明显不同,而且m4没有安装。
这也解释了为什么我路径中某个目录的符号链接不再工作。它指向/Ur/bin /M4,但一旦在该计算节点上执行该作业,就不再存在/UR/bin /M4,因此SyLink无效。
如果我想使用M4,解决方案是要求管理员在计算节点上安装M4,或者,将可执行文件的本地版本复制到我的路径变量中存在的本地目录中的某个地方。
关于linux - slurm脚本给出“找不到命令”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30019295/