我有一个名为 edit.sh 的 bash 脚本,其中包含以下代码块:
z=$(tail -1 mol-pos-1.xyz | awk '{print $NF}')
echo "before loop: z is $z" >> log
for ((r=0; $(echo "$z>20" | bc -l); r++)); do
echo "entering loop" >> log
ll=$(tail -n 1 mol-1.restart)
if echo "$ll" | grep -q "&END FORCE_EVAL"; then #check whether mol-1.restart file is written properly
cp mol-1.restart run.inp
echo "copied into run.inp" >> log
# See https://en.wikipedia.org/wiki/CP2K for a description
# of CP2K
cp2k.popt run.inp >> output$r.out 2>> error$r.err &
wait
echo "inside if" >> out
fi
echo "done running cp2k after $r repeats" >> log
z=$(tail -1 mol-pos-1.xyz | awk '{print $NF}')
echo "z is $z" >> log
done
echo "left loop successfully" >> log
当我在节点上手动运行此脚本时,它运行良好。但是当我通过运行它时斯鲁姆,我最终陷入了一个无限循环,有许多 output$r.out 和 error$r.err 文件。日志文件还表明循环正在无限运行。
然而,所有的output$r.out 和error$r.err 文件都是完全空的。这不是环境/路径问题,因为否则我应该在这些文件中收到一些错误。手动执行时也不会运行。
我不明白发生了什么事。
slurm 脚本有以下提交命令:
EXEC="sh edit.sh"
FILE=depo
(mpiexec.hydra -launcher=ssh -genv I_MPI_PIN_PROCESSOR_LIST $(echo "${irun}" | awk '{print $1*1}') -genv OMP_NUM_THREADS 1 -np 1 ${EXEC} ${FILE}.inp >> ${FILE}.out 2>> ${FILE}.err || exit 1) &
为什么这个命令不能正常运行?