동일한 .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
버그가 있습니다. for 루프는 done
대신 키워드로 종료됩니다 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