[英]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.