好吧,我正在尝试在我们的 super 计算机上将串行 MPI 作业隐藏为一个作业。主要的提交脚本基本上是这样的:
#!/bin/bash -l
#PBS -l nodes=4:ppn=8,walltime=24:00:00
cat $PBS_NODEFILE | uniq | tr '\\012' ' ' > tmp-$PBS_JOBID
read -a NODE < tmp-$PBS_JOBID
rm tmp-$PBS_JOBID
inode=-1
ijob=0
for ((K=1;K<=8;K++))
do
[ $((ijob++ % 2)) -eq 0 ] && ((inode++))
ssh ${NODE[inode]} _somepath_/RUN$K/sub.script &
done
wait
exit 0
每个子脚本看起来像:
#!/bin/bash -l
#PBS -l walltime=24:00:00,nodes=1:ppn=4
module load intel
module load ompi
export FORT_BUFFERED=1
*run executable*
wait
exit 0
有时我会遇到每个子脚本的错误(作业立即死亡):
/bin/bash: -
: invalid option
Usage: /bin/bash [GNU long option] [option] ...
/bin/bash [GNU long option] [option] script-file ...
*etc.*
最有趣的是,这是一个随机错误,这意味着如果我第二次(或第三次等)运行相同的脚本,它将毫无问题地运行。有时我很幸运,有时我不是......删除 -l 不会有帮助,因为在那种情况下无法加载模块并且 mpirun 将无法工作。有什么解决方法的建议吗?
提前致谢!
最佳答案
您的脚本中可能包含您看不到的字符。也许它是使用错误的字符集转换复制/粘贴的,或者是 DOS 格式的。如果是后者,您可以使用 tofrodos 或 dos2unix 包进行更正。
在任何一种情况下,您都可以在“vi”或其他通常会显示怪异字符(如 ^@ 或 ^M)的应用程序中将其调出。您可以尝试 cat -v filename
这可能有助于查看这些异常情况。推到推尝试 hexdump(或 hd,或 od)。
关于bash - "/bin/bash -l"无效选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17136273/