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

Ansible中如何使用注册变量定义多个with_items实现日志归档

修正后可直接运行的Playbook
- name: 归档前一天的日志文件
  become: true
  hosts: node1
  vars:
    # 取前一天的日期作为归档目录名,格式为年-月-日
    yesterday_date: "{{ lookup('pipe', 'date -d \"yesterday\" +%Y-%m-%d') }}"
    # 归档根路径,可根据实际需求修改
    backup_root_path: /data/backup/logs
    # 要搜索日志的路径,可自行添加多个路径到列表中
    log_search_paths:
      - /test/logs
      - /other/service/logs
  tasks:
    - name: 创建对应日期的归档目录
      file:
        path: "{{ backup_root_path }}/{{ yesterday_date }}"
        state: directory
        mode: '0755'
      register: log_backup_dir

    - name: 搜索符合条件的前一天日志文件
      find:
        paths: "{{ log_search_paths }}"
        # 匹配修改时间超过24小时(86400秒)的文件,如需匹配24小时内的文件改为-86400
        age: 86400
        patterns:
          - "name.log.*"
        recurse: yes
      register: matched_log_files

    # 调试用,确认匹配到的文件列表,不需要可直接注释
    - debug:
        var: matched_log_files.files

    - name: 复制日志文件到归档目录
      copy:
        src: "{{ item.path }}"
        dest: "{{ log_backup_dir.path }}/"
        # 保留原文件的权限、属性
        preserve: yes
      loop: "{{ matched_log_files.files }}"
      # 没有匹配到文件时自动跳过该任务不报错
      when: matched_log_files.matched > 0

关键调整说明

  • 日期变量修正:原逻辑取的是当天日期,归档前一天的日志需将日期调整为前一天的自然日,适配归档目录命名需求
  • find模块参数修正:原age参数3600仅匹配1小时前的文件,可根据实际归档范围调整秒数;多路径搜索时直接把要扫描的路径添加到log_search_paths列表即可
  • 复制逻辑修正:原copy模块的变量引用和遍历逻辑完全错误,find返回的匹配文件列表直接存储在matched_log_files.files中,遍历该列表即可取到每个日志文件的绝对路径,目标路径直接指定到提前创建好的归档目录即可,会自动保留原文件名
  • 新增异常兼容逻辑:没有匹配到符合条件的日志时自动跳过复制任务,不会抛出执行错误

内容的提问来源于stack exchange,提问作者Rumesh Sanjaya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 15:09:03