UNIX: 이전 작업이 완료된 후에만 작업을 제출하시겠습니까?

UNIX: 이전 작업이 완료된 후에만 작업을 제출하시겠습니까?

인수를 반복하는 동일한 .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

donefor 루프가 키워드가 아닌 키워드 로 종료되는 실수가 있습니다 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

관련 정보