自动化压缩新姿势!教你用Ansible Archive模块高效管理文件
Ansible的archive 模块是一个非常实用的工具,可以帮助你轻松创建压缩文件。无论是将文件夹还是单个文件打包成 .tar 或 .zip 格式,这个模块都能帮你搞定,非常适合用来备份、传输和管理文件。在实际工作中,它特别适合用来归档日志、配置文件或数据文件,让你的工作更加高效有序。

🥇基本用法
✍️将目录打包为压缩文件
- 将
/var/logs目录打包为.tar.gz文件,并存储到/backup/logs.tar.gz中:
- name: 打包日志目录为 tar.gz 文件
hosts: node1
tasks:
- name: 打包日志目录为 tar.gz 文件
archive: #使用模块的名称
path: /var/logs
dest: /tmp/logs.tar.gz
Ad-hoc命令:
ansible node1 -m archive -a \
"path=/var/logs dest=/tmp/logs.tar.gz"
执行上述命令后,会在tmp目录下,生成一个logs.tar.gz压缩包。如下图所示:

✍️将文件打包为压缩文件
把 /etc/hosts 和 /etc/fstab 这两个文件打包成一个 .zip 文件。如果你要压缩多个文件,建议用 playbook来操作。
- name: 打包多个文件为 zip 文件
hosts: node1
tasks:
- name: 打包多个文件为 zip 文件
archive:
path:
- /etc/hosts
- /etc/fstab
dest: /tmp/system_files.zip
执行完上述的剧本后,输出结果如下图:
🥇关键参数说明
你可以使用 ansible-doc -s archive 命令来查看每个参数的详细用法和说明。具体示例如下图所示:

下表是一些参数参数说明:
| 参数 | 说明 |
|---|---|
path | 指定要压缩的文件或目录(支持文件列表)。 |
dest | 指定生成的压缩文件路径和名称。 |
format | 指定压缩格式,支持 tar、zip、gz、bz2、xz 等,默认值为 tar。 |
exclude | 指定在打包时需要排除的文件或目录。 |
remote_src | 指定 path 是否为远程路径,默认为 no(path 为本地路径)。 |
🥇常见场景与案例
✍️排除特定文件
打包 /var/www 文件夹,但排除.log文件:
ansible node1 -m archive -a \
"path='/var/www' dest='/backup/website_backup.tar.gz' exclude='*.log'"
✍️配合时间戳动态生成文件名
使用Jinja2模板动态生成压缩文件名:
ansible all -m archive -a \
"path=/data dest=/backup/data_backup_\$(date -Iseconds).tar.gz format=gz"
✍️避免覆盖已存在的文件
启用 extra_opts 确保生成文件唯一:
ansible all -m archive -a \
"path=/data dest=/backup/data_backup_\$(date -Iseconds).tar.gz format=gz \
extra_opts='keep-old-files'"
🥇综合案例
在日常运维工作中,我们常常需要对重要的日志文件进行归档备份。例如,某企业的运维团队每天需要将 /var/log 目录下的系统日志打包为 .tar.gz 文件,保存在备份目录 /backup 中,并定期清理过期的备份文件。这种重复性操作如果手动执行,不仅效率低下,还容易出错。因此,借助Ansible的 archive 模块,可以快速实现这一需求。
✍️需求分析
-
每天将
/var/log目录下的所有日志文件压缩为.tar.gz文件。 -
备份文件以时间戳命名,存储在
/backup目录中,例如:logs_backup_20250125.tar.gz。 -
保留最近 7 天的备份文件,删除过期文件。
✍️实现步骤
创建Playbook,以下是完整的Playbook文件,实现日志打包和过期备份清理功能。
---
- name: 自动化日志归档和清理任务
hosts: all
become: true
tasks:
- name: 创建备份目录
ansible.builtin.file:
path: /backup
state: directory
mode: '0755'
- name: 归档日志文件到备份目录
ansible.builtin.archive:
path: /var/log
dest: "/backup/logs_backup_{{ ansible_date_time.iso8601_basic }}.tar.gz"
format: gz
- name: 删除超过 7 天的备份文件
ansible.builtin.find:
paths: /backup
age: 7d
recurse: yes
patterns: "*.tar.gz"
register: old_backups
- name: 移除过期备份文件
ansible.builtin.file:
path: "{{ item.path }}"
state: absent
with_items: "{{ old_backups.files }}"
该剧本包含4个任务,分别是创建备份目录、归档日志文件、删除超过7天的备份文件、移除过期的备份文件。
✍️ 运行Playbook
保存上述 Playbook为backup_logs.yml,执行以下命令运行任务:
ansible-playbook backup_logs.yml
总结
通过该模块,你可以更高效地管理文件备份和归档工作,配合Ansible的自动化优势,极大提升运维效率。
推荐阅读
- 提升运维效率:Ansible systemd 模块操作技巧,让你告别繁琐命令行!
- Ansible fetch模块详解:轻松从远程主机抓取文件
- 告别手动编辑:如何用Python快速创建Ansible hosts文件?
- 一分钟学会Ansible cron模块,高效管理你的定时任务
- 打造更安全的Linux系统:玩转PAM配置文件
- Ansible实战:如何正确选择command和shell模块?