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

这导致所有作业几乎同时提交,然后它们位于队列中。谁能详细说明“等待”命令吗?我试图推迟提交,直到上一份 SAS 工作完成完全的, 没有提交。

答案1

你有一个错误, for 循环以done关键字终止,而不是fi

for variable in lists
do
    # do something here
done

答案2

删除“等待”命令,它没有任何用处。另外,删除“&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

相关内容