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 模块
今天的学习就分享都这里,感觉喜欢改分享的,可以关注个人微信公众号 搜 DailyJobOps
或者 全栈运维
DailyJobOps
标签:name,ansible,crontab,cron,etc,Ansible,模块,root From: https://blog.51cto.com/colinspace/6373229