在Ansible中管理整个crontab文件

在Ansible中管理整个crontab文件,cron,ansible,Cron,Ansible,我有一个crontab,在服务器上包含大约80个条目。我想使用Ansible管理crontab 理想情况下,我会将服务器的crontab复制到我的Ansible目录,并创建一个Ansible任务,以确保在服务器上设置crontab 但是,似乎只管理单个cron条目,而不是整个crontab文件 手动将crontab迁移到Ansible任务是乏味的。即使我找到或制作了一个能够自动执行的工具,我觉得YAML文件的可读性也远不如crontab文件 你知道我如何使用Ansible处理这个大crontab

我有一个crontab,在服务器上包含大约80个条目。我想使用Ansible管理crontab

理想情况下,我会将服务器的crontab复制到我的Ansible目录,并创建一个Ansible任务,以确保在服务器上设置crontab

但是,似乎只管理单个cron条目,而不是整个crontab文件

手动将crontab迁移到Ansible任务是乏味的。即使我找到或制作了一个能够自动执行的工具,我觉得YAML文件的可读性也远不如crontab文件


你知道我如何使用Ansible处理这个大crontab吗?

我找到了一个简单的方法。我将crontab文件复制到服务器,然后在文件更改时使用shell模块更新crontab

crontab任务:

---
- name: Ensure crontab file is up-to-date.
  copy: src=tasks/crontab/files/{{ file }} dest={{ home }}/cronfile
  register: result
- name: Ensure crontab file is active.
  shell: crontab cronfile
  when: result|changed
在我的剧本中:

- include: tasks/crontab/main.yml file=backend.cron

我是这样解决这个问题的:

- name: Save out Crontabs
  copy: src=../files/crontabs/{{ item }} dest=/var/spool/cron/{{ item }} owner={{item}} mode=0600
  notify: restart cron
  with_items:
  - root
  - ralph
  - jim
  - bob

这种方法的优点(与写入中间文件相比)是删除对live crontab的任何手动编辑,并用Ansible受控版本替换。缺点是它在某种程度上破坏了cron进程。

通过这种方式保持幂等性:

- name: crontab
  block:
    - name: copy crontab file
      copy:
        src: /data/vendor/home/cronfile
        dest: /home/mule/cronfile
        mode: '0644'
      register: result

    - name: ensure crontab file is active
      command: crontab /home/mule/cronfile
      when: result.changed

  rescue:
    - name: delete crontab file
      file:
        state: absent
        path: /home/mule/cronfile

只需使用
copy
模块将crontab复制到适当的位置?我没有root权限。可能使用?如果您没有root,您将如何修改crontab?用户不需要root权限来更新其crontab.Upvoted!提示:您应该首先备份旧的cron,以防在Ansible之外进行手动编辑。“优点是……删除对live crontab的任何手动编辑”-我认为这是一个bug。首先备份现有的cron就可以很容易地解决这个问题。