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

相關內容