다음 코드 블록을 포함하는 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) &
이 명령이 제대로 작동하지 않는 이유는 무엇입니까?