簡體   English   中英

成功執行並行腳本后運行Shell腳本

[英]Run shell script after succesfull execution of parellel scripts

我有4個Shell腳本,我想並行執行前3個腳本。 在成功完成所有3個腳本之后,我要執行第4個腳本

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

script4.sh應該在所有3次執行之​​后執行。

在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

首先,它在后台啟動所有前三個腳本並收集其pid。 然后,它遍歷每個pid,等待其退出並檢查其返回值。 如果前三個腳本中的任何一個失敗, $JOBS_FAILED設置為字符串true但是所有進程仍在等待。 前三個腳本全部完成后,該腳本將檢查是否有任何作業失敗。 如果不是,則運行script4.sh。

bash 4.3添加了-n標志來wait ,使其等待任何一個后台作業完成。 對於固定數量的后台作業,您可以使用類似

script1.sh &
script2.sh &
script3.sh &
wait -n && wait -n && wait -n && script4.sh

對於大量或可變數量的后台作業,Kurt的答案更好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM