Ansible cron任务配置异常:两个任务仅生成一条crontab条目如何修复?
Ansible cron任务重复覆盖问题修复
问题原因
Ansible的ansible.builtin.cron模块通过name字段作为cron任务的唯一标识。你的循环中所有任务使用了相同的name: "Run script every 5 minutes",导致第二条任务执行时覆盖了第一条,最终crontab中只保留最后一条任务。
修复方法
修改cron任务的name参数,为每个任务生成唯一标识即可,以下提供两种可行方案:
方案一:基于脚本文件名生成唯一名称
直接修改角色代码,利用脚本路径的文件名部分生成唯一任务名:
--- - name: Create cron job ansible.builtin.cron: name: "Run {{ item.script_path | basename }} every 5 minutes" minute: "5" job: "/bin/bash {{ item.script_path }} {{ item.script_arguments }}" state: present loop: "{{ cron_jobs }}"
方案二:传入自定义任务名称
在main.yml的变量中为每个任务指定专属名称:
--- # your_playbook.yml - hosts: all become: yes gather_facts: no become_method: sudo roles: - include_role: name: cron_job vars: cron_jobs: - name: "Storage mount check" script_path: "/export/storage_mount.sh" script_arguments: "action" - name: "Service status check" script_path: "/export/service_status.sh" script_arguments: ""
对应修改角色代码,使用传入的自定义名称:
--- - name: Create cron job ansible.builtin.cron: name: "{{ item.name }}" minute: "5" job: "/bin/bash {{ item.script_path }} {{ item.script_arguments }}" state: present loop: "{{ cron_jobs }}"
验证效果
修复后重新运行playbook,查看目标主机的crontab,会生成两条独立的任务,不会再出现覆盖情况。
内容的提问来源于stack exchange,提问作者GoneCase123
相关产品推荐
相关产品推荐

