동시에 여러 작업을 실행하려고 합니다. 작업을 하나씩 실행하기 위한 스크립트를 작성했는데 한꺼번에 모두 제출하고 싶습니다. 이전 작업이 완료될 때까지 기다려서는 안 됩니다. 스크립트는 다음과 같습니다.
#!/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
이 질문에 태그가 지정되었으므로 이 유틸리티가 필요 하지 않으며 seq
bash 내장만 사용합니다 bash
.