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