Bash Shell脚本-“;“等等”;不等待所有进程完成
在shell脚本中,我正在构建一些docker图像(在后台),一旦完成,我将运行它们(在后台),然后我必须等待它们全部完成。代码如下所示:Bash Shell脚本-“;“等等”;不等待所有进程完成,bash,shell,docker,parallel-processing,wait,Bash,Shell,Docker,Parallel Processing,Wait,在shell脚本中,我正在构建一些docker图像(在后台),一旦完成,我将运行它们(在后台),然后我必须等待它们全部完成。代码如下所示: for tag in "${tags[@]}" do docker build -f dockerFilePath -t $tag . & done wait for tag in "${tags[@]}" do docker run $tag arg1 arg2 | tee logoutput & done wait
for tag in "${tags[@]}"
do
docker build -f dockerFilePath -t $tag . &
done
wait
for tag in "${tags[@]}"
do
docker run $tag arg1 arg2 | tee logoutput &
done
wait
问题在于,并非第二个等待部分中的所有docker运行命令都能够完成。docker run命令需要不同的时间来完成,其中任何一个命令都是不完整的(总共4个)
此外,我还了解到wait只适用于调用wait的进程的直接子进程,在本例中,我认为所有docker build和docker run命令都是脚本进程的直接子进程。或者这种假设是错误的?@是的,这很好,因为构建速度非常快,因为它是从缓存中完成的,所以它们几乎是瞬间完成的。对于某些调试,在
等待之前和之后插入作业可能很有用。。。。在等待
之后,它不应显示任何内容。。。一个ps
(带有一些参数,可能是-f
)也可能有助于验证作业是否仍在运行。。。(当从命令行运行时,b
set
选项可能会让您认为正在进行的事情比您想象的要多…)考虑使用GNU并行,您的脚本将变为两行,并且更加可控、可记录和可重启<代码>并行--干运行docker构建-f dockerFilePath-t$tag.::“${tags[@]}”