好吧,我正试图在我们的超级计算机上运行作为一个工作掩盖的串行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
每个sub.script看起来像:
#!/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
有时我会遇到每个sub.script的错误(作业立即死亡):
/bin/bash: -
: invalid option
Usage: /bin/bash [GNU long option] [option] ...
/bin/bash [GNU long option] [option] script-file ...
*etc.*
最有趣的是它是一个随机错误,这意味着如果我在第二个(或第三个等)时间运行相同的脚本,它将运行没有任何问题。有时我很幸运,有时我不是......删除-l将无济于事,因为在这种情况下模块无法加载,mpirun将无法正常工作。有任何建议如何修复它?
提前多多感谢!
答案 0 :(得分:18)
您的脚本中可能包含您无法看到的字符。也许是使用错误的字符集翻译进行复制/粘贴或者是DOS格式。对于后者,您可以使用tofrodos或dos2unix包进行更正。
在任何一种情况下,您都可以在'vi'或其他应用程序中提取它,这些应用程序通常会显示奇怪的字符,如^ @或^ M.您可以尝试cat -v filename
,这可能有助于看到这些奇怪的事情。推动尝试hexdump(或高清,或od)。
答案 1 :(得分:0)
我刚刚遇到了这个问题,并且行尾无效。我从CRLF更改为LF,然后将其修复!