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

У вас ошибка, цикл 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

Связанный контент