Bash에서 여러 파일로 프로그램 실행

Bash에서 여러 파일로 프로그램 실행

동시에 여러 작업을 실행하려고 합니다. 작업을 하나씩 실행하기 위한 스크립트를 작성했는데 한꺼번에 모두 제출하고 싶습니다. 이전 작업이 완료될 때까지 기다려서는 안 됩니다. 스크립트는 다음과 같습니다.

#!/bin/bash --login

# Default job location in current directory

#SBATCH -p multicore
#SBATCH -n 4 # Use 4 cores

module load gaussian/g16c01_em64t

export GAUSS_SCRDIR=/scratch/$USER/gau_temp_$JOB_ID
mkdir -p $GAUSS_SCRDIR
export GAUSS_PDEF=$NSLOTS

jobnames=($(seq 1 1 100))

for i in ${jobnames[@]}; do
$g16root/g16/g16 < "job_"${i}".gjf" > "job_"${i}".out"
done

작업에 대한 입력 파일은 동일한 디렉터리에 있으며 이름은 job_1.gjf, job_2.gjf...job_100.gjf입니다. 이 코드는 순차적 작업 실행에서 제대로 작동합니다.

답변1

&설명에서 알 수 있듯이 bash만 사용하는 경우 작업을 백그라운드에 넣어야 합니다 .

변화

for i in ${jobnames[@]}; do
$g16root/g16/g16 < "job_"${i}".gjf" > "job_"${i}".out"
done

도착하다

for i in ${jobnames[@]}; do
    $g16root/g16/g16 < "job_"${i}".gjf" > "job_"${i}".out" &
done
wait

루프에서 약간의 들여쓰기를 허용하고 작업을 병렬로 실행하고 마지막에 모두 완료될 때까지 기다립니다.

네가 그렇게 하면 난 변하는 경향이 있어

jobnames=($(seq 1 1 100))

for i in ${jobnames[@]}; do

도착하다

for i in {1..100}; do

이 질문에 태그가 지정되었으므로 이 유틸리티가 필요 하지 않으며 seqbash 내장만 사용합니다 bash.

관련 정보