0
点赞
收藏
分享

微信扫一扫

Ansible系统-模块-cron学习整理

1、常规性用法

ansible test-xxxx-01-vm -m cron -a 'minute=30 hour=15 name="ansible crontab demo" job="bash /tmp/1.sh" '

默认是写到 root 用户的 crontab中去,可以通过如下两种方式查看写入结果

1)登录到目标主机,切换到对应的用户执行如下命令

crontab -l -u username

比如上面的 username 是root,就可以是 crontab -l [-u root] ,当然如果是查看当前用户的crontab 就不用使用 -u 选项

2)登录到目标主机,使用root用户执行如下命令

cat /var/spool/cron/username

上面的username是Linux主机上的有效用户, 比如使用 ansible 写入到 james 用户的crontab中去

ansible test-xxxx-01-vm -m cron -a 'minute=30 hour=15 name="ansible crontab demo" job="bash /tmp/1.sh" user="james"'

2、写入到 /etc/crontab

按照ansible 官方文档介绍,需要使用 cron_file 选项,配置成绝对路径的文件,所以一般配置成 /etc/crontab 即可

ansible test-xxxx-01-vm -m cron -a 'minute=30 hour=15 name="ansible crontab demo" job="bash /tmp/1.sh" cron_file="/etc/crontab" user=root state=absent'

test-xxxx-01-vm | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "cron_file": "/etc/crontab",
    "envs": [
        "SHELL",
        "PATH",
        "LANG",
        "MAILTO"
    ],
    "jobs": [
        "collect_netstat_ctl",
        "ansible crontab demo"
    ]
}

注意:使用 cron_file 选项的时候,比如要同步使用 user 选项,不然会有如下报错

"msg": "To use cron_file=... parameter you must specify user=... as well"

这个时候,执行执行 cat /etc/crontab 就能看到新增的定时任务

[root@test-xxxx-01-vm ~ Thu May 18 15:44:49]# cat /etc/crontab |tail -2
#Ansible: ansible crontab demo
30 15 * * * root bash /tmp/1.sh

3、写入到 /etc/cron.d 下的独立文件

核心还是使用 cron_file 配置选项,记得同时要用 user 配置选项哦

ansible test-xxxx-01-vm -m cron -a 'minute=30 hour=15 name="ansible crontab demo" job="bash /tmp/1.sh" cron_file="lcdemo" user=root'

test-xxxx-01-vm | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "cron_file": "lcdemo",
    "envs": [],
    "jobs": [
        "ansible crontab demo"
    ]
}

验证写入是否成功

[root@test-xxxx-01-vm ~ ]# ls -l /etc/cron.d/lcdemo
-rw-r--r-- 1 root root 63 May 18 15:47 /etc/cron.d/lcdemo

[root@test-xxxx-01-vm ~ ]# cat /etc/cron.d/lcdemo
#Ansible: ansible crontab demo
30 15 * * * root bash /tmp/1.sh

扩展

1、关于 cron 模块的的配置项说明

  • • minute/hour/month/year/weekday 就是设置任务执行的时间规则,用法就是Linux 下crontab的用法
  • • cron_file 是任务写入到具体的问文件中,需要 user 配置项一起使用
  • • user/job/name 给指定用户设定定时任务job, 任务的名称是 name
  • • state 值有 present/absent两个,分别表示新增、删除定时任务

有两个特殊的配置项需要说明:

  • • special_time 指定一些特殊事件时触发任务,比如reboot 是主机重启的时候,weekly 是每周执行一次
  • • job 常规是配置的任务,但是如果在使用了 env=yes 的时候,job的值是 name指定的变量的值

具体的配置项介绍可以参考官网说明: https://docs.ansible.com/ansible/2.9/modules/cron_module.html#cron-module

2、给相关crontab文件添加变量

核心是利用 env 配置项,这是按照playbook的进行配置,结果请自行验证哦

---
- hosts: test-xxxx-01-vm
  tasks:
    - name: Creates an entry like "LCVAR=lcval" on top of crontab
      cron:
        name: LCVAR
        env: yes
        job: lcval
        
    - name: Creates an entry like "LCVARV2=ansible-alias" on top of crontab
      cron:
        name: LCVARV2
        env: yes
        value: lcvalv2
        
    - name: Creates an entry like "LCVARV3=lcvalv3" and insert it after LCVARV1 declaration
      cron:
        name: LCVARV3
        env: yes
        value: lcvalv3
        insertafter: LCVARV1

上述执行的结果是在root用户的crontab中(/var/spool/cron/root) 中新增三个变量且分别给定了变量的值。

特殊的是:

  • • name 变量对应的值,可以使用job 或者 value 来制定
  • • insertafter/insertbefore 是在 指定的变量的后面、前面 插入新增的变量

3、使用 lineinfile 模块添加crnotab 定时任务

除了第一趴介绍的使用 cron_file="/etc/crontab" 往该文件中配置定时任务之外,其实也可以使用 lineinfile 模块,实现如下

- name: set crontab for tan create-index.html
  lineinfile:
    path: /etc/crontab
    line: "#Ansible: tan create index.html\n*/30 * * * * root php-5.6 /data/project/store/bin/cli request_uri='/Cli/System/createTanIndex'"
  tags:
    - crontab

这里只是告诉你一种额外的方法,但是crontab 配置还是建议使用 cron 模块

Ansible系统-模块-cron学习整理_定时任务

DailyJobOps

举报

相关推荐

0 条评论