인수를 반복하는 동일한 .sas 작업을 제출하고 싶지만 이전 작업이 완료된 후에만 작업을 제출하고 싶습니다. 내 시도는 다음과 같습니다.
#!/bin/ksh
export weeks="1 2 3"
for week in $weeks
do
sas -log job$week.log job.sas > /dev/null & pid_ind=$!
wait $pid_ind
echo "job complete for week $week"
done
이로 인해 모든 작업이 거의 동시에 제출되고 대기열에 들어갑니다. 누구든지 'wait' 명령에 대해 자세히 설명할 수 있나요? 이전 SAS 작업이 완료될 때까지 제출을 보류하려고 합니다.완전한, 제출하지 않은.
답변1
done
for 루프가 키워드가 아닌 키워드 로 종료되는 실수가 있습니다 fi
.
for variable in lists
do
# do something here
done
답변2
"wait" 명령을 제거하면 아무 소용이 없습니다. 또한 "& pid_ind=$!"를 제거하세요. 이 코드는 발생한 문제를 일으키는 백그라운드 프로세스에 작업을 넣습니다.
데몬 프로세스(및 백그라운드에서 실행되는 프로세스) 외부에서 스크립트 내의 명령은 동기식입니다. 각 명령은 마지막 명령이 완료될 때까지 기다립니다.
#!/bin/ksh
weeks="3 4 5"
echo "Waiting for first job to complete..."
for week in $weeks; do
sas -log job$week.log job.sas > /dev/null
echo "job complete for week $week"
done