You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本中并行执行ipset-restore进程并等待全部完成,及资源自动调度工具咨询

Bash脚本中并行执行ipset-restore进程并等待全部完成,及资源自动调度工具咨询

嗨,我来帮你搞定这个问题!

一、并行执行+等待全部完成的基础方法

如果你想让多个ipset-restore并行跑,同时确保所有任务都完成后再执行后续指令,用bash自带的后台进程和wait命令就可以轻松实现,完全不需要额外工具:

  1. 直接后台启动所有任务再等待
    把每个ipset-restore命令后面加&让它在后台运行,最后用wait命令等待所有后台进程结束:

    # 逐个启动后台任务
    ipset-restore < list1.txt &
    ipset-restore < list2.txt &
    ipset-restore < list3.txt &
    # ... 把所有需要执行的list都加上
    
    # 等待所有后台进程完成
    wait
    echo "所有ipset恢复任务都完成了,现在可以执行后续操作啦!"
    
  2. 用循环简化(适合文件数量多的情况)
    如果你的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。
  • 使用示例:
    # 自动匹配CPU核心数来并发执行,默认会等待所有任务完成
    parallel ipset-restore < {} ::: list1.txt list2.txt list3.txt ...
    
    如果想手动指定并发数(比如同时跑4个任务),可以加-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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 11:35:31