首页/系统/Linux 运维命令速查/GNU parallel 并行执行
进程与作业69 条

GNU parallel 并行执行

比 xargs -P 更结构化的并行器:参数替换串、进度条、失败策略、重试一应俱全,批量任务提速的省心选择。

Linux 运维命令速查系统更新于 2026-10-13

GNU parallel 是什么

GNU parallel 是比简单并行执行更结构化的并行器:它按参数替换串把一条命令展开成多条并行任务,带进度显示、失败策略、任务日志与超时控制。相比手工切分或用最基础的并行选项,它更适合「同一命令处理一大批输入」的批量任务,例如批量压缩日志、批量下载、批量转码。用之前一定要先看一遍展开后的命令,参数里含空格或特殊字符时尤其重要。

基本信息

适用平台GNU/Linux、macOS(需安装 GNU parallel)
语法parallel [选项] 命令 ::: 参数...
常用选项-j 并行数、--bar 进度条、--dry-run 预览、--halt 失败策略
替换串原参数、去掉后缀、取文件名、序号各有写法
输入方式命令行参数、管道输入、输入文件
首次运行会提示引用确认,自动化脚本要提前处理

典型使用场景

  • 批量压缩或归档大量日志文件,缩短总耗时。
  • 批量下载一批文件,控制并发避免压垮源站。
  • 批量转码或处理数据文件,充分利用多核。
  • 批量对多台主机执行检查命令。
  • 需要失败即停的场景:并行执行同时严格校验结果。

常用写法

常用写法
parallel -j 4 gzip ::: *.log                            # 4 并发批量压缩
ls *.csv | parallel -j 8 --bar 'process {} > {.}.out'   # 管道输入加进度条
parallel --dry-run -j2 echo {} ::: a b c                # 只打印将执行的命令
parallel -j2 --halt soon,fail=1 'curl -sfO https://example.com/{}' ::: a.zip b.zip
parallel -j 2 --joblog /tmp/parallel.log 'shard.sh {}' ::: 1 2 3 4   # 记录任务状态
cat hosts.txt | parallel -j 5 --timeout 30 'ssh {} uptime'          # 逐台执行并限超时

选项与写法对照

选项或写法作用使用要点
-j 并行数控制同时执行的任务数从较小值调起,观察资源占用
--bar显示进度长时间批处理时便于观察
--dry-run只打印不执行参数含空格或特殊字符时必做
--halt失败处理策略控制失败时是否立即停止
--joblog记录任务状态事后核对哪些任务失败
替换串参数变换去后缀、取文件名、序号等常用写法
替换串是核心:原参数、去掉后缀、取文件名、序号各有不同写法,写错会导致输出文件覆盖或路径错误,务必先在演练模式下确认展开结果。
并行数要从小往大调:IO 密集型任务并行度开满反而更慢,需要根据磁盘与服务端的承受能力试探出最佳值。
首次运行会提示引用确认:交互环境按提示处理,自动化脚本中要通过参数或环境变量提前确认,避免任务卡在提示上。

易错点

  • 不做演练直接执行,参数含空格或特殊字符时任务被拆分成多项,产生意料之外的文件或请求。
  • 把并行数拉到与核心数相当甚至更高,IO 密集型任务互相争抢,总耗时反而变长。
  • 失败任务被静默跳过:没有查看任务日志就认为全部成功,实际部分结果缺失。
  • 多个任务使用同一输出文件名,后完成的覆盖先完成的,结果只剩一份。

数据来源与参考

  • GNU parallel 官方文档(gnu.org/software/parallel)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌