我正在尝试向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
但这也没有起作用(结果相同)。 有人可以帮忙吗?
which m4
的输出是什么? - Cyrusls -ld / /usr /usr/bin /usr/bin/m4
的输出。 - Cyrus