shell多进程并发导入docker镜像

网友投稿 722 2022-11-23

shell多进程并发导入docker镜像

shell多进程并发导入docker镜像

初级版

不足之处:当镜像较多时,会同时启动几百个进程,会突然增大服务器的负载,容易导致系统瞬间崩溃

for image in $(ls *.tar)do docker load -i $image &donewait

wait命令后如果以进程号作为参数,则等待该进程结束并返回其状态值。如果没有指定任何参数,则会等待当前shell激活的所有的子进程结束,返回状态为最后一个进程的退出状态。

中高级版

通过文件描述符和命名管道来控制每次并发的进程数量. 下面是每次导入10个镜像

#!/bin/bashPROGRESS_NUM=10 #并发的进程数量PIPE_FILE="/tmp/multiload_$$.tmp" #命名管道文件#创建命名管道文件,创建其文件描述符,通过重定向导入数据到管道文件中.mkfifo ${PIPE_FILE}exec 12<>${PIPE_FILE}for i in `seq ${PROGRESS_NUM}`do echo "" >&12 &done#成功读取命名管道中的数据后开启新的进程,docker load#所有内容读取完后read被阻塞,无法再启动新进程.#等待前面启动的进程结束后,继续往管道文件中写入数据,释放阻塞,再次开启新的进程.#read -u指定读取文件描述符for image in $(ls *.tar)do read -u12 { docker load -i ${image} echo "" >&12 } &donewaitrm -f ${PIPE_FILE}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Linux管道详解
下一篇:shell字符串处理,解决传入参数有空格的问题
相关文章

 发表评论

暂时没有评论,来抢沙发吧~