在Ansible中创建一个定时任务(ERROR!’cron’不是Play的有效属性)

80次阅读
没有评论

问题描述

在使用Ansible时遇到了问题,他想创建一个定时任务,但是在运行Ansible playbook时出现了错误。他的yaml文件似乎有问题,但是他不确定具体哪里出错了。

解决方案

请注意以下操作可能会因版本差异或特定情况而有所不同,建议在操作前做好备份。
在Ansible中创建定时任务需要注意Playbook的结构。下面是一个修正后的示例:

步骤1:创建Playbook

创建一个新的Playbook文件(比如site.yml),确保Playbook的结构是正确的。在Playbook中,至少需要指定hosts(主机)部分,然后在tasks(任务)中定义你的任务。

以下是一个示例Playbook的结构:

---
- name: Create Cron Job
  hosts: localhost
  tasks:
    - name: Ensure cron job is present
      cron:
        name: "Copy all rsnapshot backups from <hostname>"
        minute: "30"
        hour: "02"
        job: "/usr/bin/rsync -avhz -e \"ssh\" --rsync-path=\"sudo rsync\" -H --delete --numeric-ids <ipaddress>:\"/data/rsnapshot-backups/<ipaddress>\" /data/rsnapshot-backup"
        user: root
        cron_file: rsync.cron
        state: present

步骤2:运行Playbook

运行你的修正后的Playbook,使用如下命令:

ansible-playbook -i "localhost," -c local site.yml

注意事项

  1. 在修正后的示例中,Playbook的结构是正确的,包含了hoststasks
  2. 在任务部分,使用cron模块来创建定时任务。注意job部分的命令需要用双引号包裹,如果命令中包含双引号,则需要使用转义字符\
  3. cron模块的参数中,添加了cron_filestate来确保定时任务的存在,并且不会删除文件中的其他条目。

通过按照以上步骤操作,你应该能够成功创建一个定时任务,并解决原先出现的错误。

如果你的公司使用了一个名为backups的标签来运行Playbook,你也可以使用如下命令运行修正后的Playbook:

ansible-playbook -i "localhost," -c local site.yml --tags backups

请确保在实际操作前做好备份,以防意外情况发生。

另一解决方案

用户提供了另一种解决方案,可以通过将定时任务的任务添加到全局Playbook中,并使用标签来调用。这个方法可以解决之前遇到的问题,同时可以更好地管理任务的依赖关系。

具体操作步骤请参考用户提供的解决方案。

总结

在Ansible中创建定时任务需要注意Playbook的结构和任务模块的使用。修正后的示例Playbook中的结构是正确的,可以按照这个模板进行操作。如果之前遇到错误,根据修正后的示例进行调整,应该能够顺利创建定时任务。如果你的公司使用了标签,还可以通过标签来管理任务的运行。记得在操作前备份数据,以免发生意外情况。

正文完