在成功执行parellel脚本后运行shell脚本

时间:2016-03-17 19:25:58

标签: bash shell unix

我有4个shell脚本,前3个我希望并行执行的脚本。在成功完成所有3个脚本后,我想执行第4个脚本

Parellelexecution  
     sh script1.sh,
     sh script2.sh,
     sh script3.sh

script4.sh应该在所有3次执行后执行。

2 个答案:

答案 0 :(得分:2)

在bash中你可以这样做:

pids=
for s in script1.sh script2.sh script3.sh; do
   $s &
   pids="$pids $!"
done

JOBS_FAILED=false
for pid in $pids; do
   if ! wait $pid; then
       # script didn't exit successfully
       JOBS_FAILED=true
   fi
done

if [[ $JOBS_FAILED == false ]]; then
    script4.sh
fi

首先,它在后台启动所有前3个脚本并收集它们的pid。然后它会遍历每个pid,等待它退出并检查其返回值。如果前三个脚本中的任何一个失败,$JOBS_FAILED将设置为字符串true,但仍会等待所有进程。完成前3个脚本后,脚本会检查是否有任何作业失败。如果没有,则运行script4.sh。

答案 1 :(得分:2)

bash 4.3向-n添加了wait标记,让它等待任何一个后台作业完成。对于固定数量的后台作业,您可以使用类似

的内容
script1.sh &
script2.sh &
script3.sh &
wait -n && wait -n && wait -n && script4.sh

对于大量或可变数量的后台工作,Kurt的答案更好。