次のコードブロックを含む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) &
このコマンドが正しく機能しないのはなぜですか?