【问题标题】:Error Handling for executing multiple sub shell scripts in parallel并行执行多个子 shell 脚本的错误处理
【发布时间】:2016-05-27 21:59:21
【问题描述】:

我有几个需要并行运行的子 shell 脚本。要并行运行这些脚本,我使用以下命令

sh abc.sh "Hi" & sleep 60 & sh abc.sh "Hello" & sleep 60 & sh abc.sh "how";
var_err=$?
if [ $var_err != 0 ]; then
            flag=FAIL
            MASTER_RUN_STATUS_UPDATE "$flag"
            break;
        else
            flag=SUCCESS
            MASTER_RUN_STATUS_UPDATE "$flag"
        fi

如何处理上述每个子shell 脚本的错误。如果所有 3 个子 shell 脚本都成功,我想将状态返回为成功,反之亦然。每个子shell 应在 100 秒后执行。但是使用上面的语法,我只能得到最后执行的进程的状态。

请帮助我如何实现这一目标。

注意:我没有 GNU 并行

提前致谢

【问题讨论】:

标签: shell unix error-handling parallel-processing ksh


【解决方案1】:

我将“每个子shell 应在 100 秒后执行”解释为“在 100 秒后被杀死”:

results=/tmp/results_
rm ${results}* 2>/dev/null

date
(sleep 4; echo $? > ${results}1)&
subproc_1=$!
(sleep 9;  echo $? > ${results}2)&
subproc_2=$!
(sleep 5; false; echo $? > ${results}3)&
subproc_3=$!

(sleep 100; kill ${subproc_1} ${subproc_2} ${subproc_3}) &
wait ${subproc_1} ${subproc_2} ${subproc_3}

date
for i in {1..3}; do
   # only display result when resultfile exists
   test -f ${results}$i && printf "Process %d: Result %d\n" $i $(cat ${results}$i)
done

【讨论】:

    【解决方案2】:

    您可以等待每个脚本并使用以下简单模式收集其退出状态:

    abc.sh Hi   & PID1=$!
    abc.sh Hello& PID2=$!
    abc.sh how  & PID3=$!
    
    if wait $PID1 && wait $PID2 && wait $PID3
    then    flag=SUCCESS
    else    flag=FAIL
    fi
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-23
      • 1970-01-01
      • 2011-08-22
      • 1970-01-01
      • 2016-03-27
      • 2013-01-21
      • 2021-06-02
      • 1970-01-01
      相关资源
      最近更新 更多