Bash脚本中并行执行ipset-restore进程并等待全部完成,及资源自动调度工具咨询
Bash脚本中并行执行ipset-restore进程并等待全部完成,及资源自动调度工具咨询
嗨,我来帮你搞定这个问题!
一、并行执行+等待全部完成的基础方法
如果你想让多个ipset-restore并行跑,同时确保所有任务都完成后再执行后续指令,用bash自带的后台进程和wait命令就可以轻松实现,完全不需要额外工具:
直接后台启动所有任务再等待
把每个ipset-restore命令后面加&让它在后台运行,最后用wait命令等待所有后台进程结束:# 逐个启动后台任务 ipset-restore < list1.txt & ipset-restore < list2.txt & ipset-restore < list3.txt & # ... 把所有需要执行的list都加上 # 等待所有后台进程完成 wait echo "所有ipset恢复任务都完成了,现在可以执行后续操作啦!"用循环简化(适合文件数量多的情况)
如果你的list文件很多,可以把它们放进数组,用循环批量启动后台进程:# 定义包含所有list文件的数组 restore_lists=(list1.txt list2.txt list3.txt list4.txt ...) # 循环启动每个任务到后台 for list_file in "${restore_lists[@]}"; do ipset-restore < "$list_file" & done # 等待全部完成 wait这样不管有多少个list文件,代码都很简洁,而且
wait会自动等最慢的那个任务结束后再继续。
二、自动调度资源的工具推荐(Bonus需求)
如果想让系统自动控制并发数,避免占满所有资源,有几个专门的工具可以用:
1. GNU Parallel(最推荐)
这个工具专门为并行任务设计,能自动根据你的CPU核心数调整并发数,也可以手动指定,还支持很多高级功能。
- 安装方法:大部分发行版可以通过包管理器安装,比如Debian/Ubuntu用
apt install parallel,CentOS/RHEL用dnf install parallel。 - 使用示例:
如果想手动指定并发数(比如同时跑4个任务),可以加# 自动匹配CPU核心数来并发执行,默认会等待所有任务完成 parallel ipset-restore < {} ::: list1.txt list2.txt list3.txt ...-j参数:parallel -j 4 ipset-restore < {} ::: list1.txt list2.txt list3.txt ...
2. xargs(轻量替代)
xargs是很多系统默认自带的工具,用-P参数可以控制并发数:
# -P 4表示同时运行4个进程,-I {}用来替换文件名占位符 echo list1.txt list2.txt list3.txt ... | xargs -P 4 -I {} ipset-restore < {}
它的功能没有Parallel丰富胜在不用额外安装,适合简单场景。
备注:内容来源于stack exchange,提问作者user3450548
相关产品推荐
相关产品推荐

