slurm으로 실행하면 bash의 for 루프가 무한히 실행됩니다.

slurm으로 실행하면 bash의 for 루프가 무한히 실행됩니다.

다음 코드 블록을 포함하는 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) &

이 명령이 제대로 작동하지 않는 이유는 무엇입니까?

관련 정보