salt.states.cron
work with cron
1. top文件(top.sls)
base:
'test_mysql_04.ztt':
- crontab
2. crontab文件(init.sls)
date > /tmp/crontest:
cron.present:
- identifier: Reno_crontest
- comment: Salt_crontest
- user: root
- minute: 7
- hour: 5
3. 推送crontab内容,Example:
salt 'test_mysql_04.ztt' state.highstate

4. 更新指定identifier的crontab任务,Example:
Init.sls内容:
date > /tmp/crontest:
cron.present:
- identifier: Reno_crontest
- comment: Salt_crontest
- user: root
- minute: 7
- hour: 5
- daymonth: 20
推送:
salt 'test_mysql_04.ztt' state.highstate

5. 最后,时间参数(例如:minute,hour等)可以随机化,使用random代替具体的时间值,如下sls文件:
date > /tmp/crontest:
cron.present:
- identifier: Reno_crontest3
- comment: Salt_crontest
- user: root
- minute: random
- hour: 5
- daymonth: 20
推送更新后cron信息,如下:

6. 可以使用name参数定义cron任务的命令信息,Example:
cron_jobs:
cron.present:
- name: date > /tmp/crontest
- identifier: Reno_crontest
- comment: Salt_crontest
- user: root
- minute: random
- hour: 2
- daymonth: 20
在蛮久以前(2014.2),当对一个存在的cron任务做修改,yaml的name定义是任务的唯一标示,因此如果存在一个cron任务如下:
date > /tmp/crontest:
cron.present:
- user: root
- minute: 5
变成这样:
date > /tmp/crontest:
cron.present:
- user: root
- minute: 7
- hour: 2
那么这个cron任务就会被更新;但是如果name定义(cron command)改变了,则会增加一个新的cron任务。
庆幸的是,我们可以依赖一个参数-identifier作为唯一标示,例如如下一个cron任务:
date > /tmp/crontest:
cron.present:
- identifier: Reno_crontest
- user: root
- minute: 7
- hour: 2
在2014的版本中,新增加了daymonth参数的cron任务:
date > /tmp/crontest:
cron.present:
- identifier: Reno_crontest
- user: root
- minute: 7
- hour: 2
- daymonth: 20
或者修改name定义(cron command):
superscript > /tmp/crontest:
cron.present:
- identifier: Reno_crontest
- user: root
- minute: 7
- hour: 2
- daymonth: 20
那么,只会更新cron任务,因为identifier相同。
cron.absent(name, user=’root’, identifier=None,**kwargs)
确认对指定的user移除指定的cron job;只有name匹配才会移除cron job。
name
要移除user crontab的命令
user
需要修改(移除)crontab的user,默认是root
identifier
跟踪cron job的用户自定义identifier,默认是state的id
g.e
mycron/init.sls
del_cron_jobs:
cron.absent:
- name: /usr/local/bin/dump_backup.sh > /tmp/dump_backup.log 2>&1
- user: mysql
- identifier: xtra_drcmeta_bak
执行结果:
cron.present(name, user='root', minute='*', hour='*', daymonth='*', month='*',dayweek='*', comment=None, identifier=None)
g.e
mycron/init.sls
xtra_backup_cronjob:
cron.present:
- name: /usr/local/bin/xtra_backup.sh > /tmp/xtra_backup.log 2>&1
- identifier: xtra_backup
- comment: xtrabackup bakcup files
- user: mysql
- minute: 0
- hour: 2
- dayweek: '1,2,4,5,7'
- require:
- file: xtra_backup.sh
drcmeta_backup_cronjob:
cron.present:
- name: /usr/local/bin/drcmeta_bak.sh > /tmp/drcmeta_bak.log 2>&1
- identifier: xtra_drcmeta_bak
- comment: xtrabackup drcmeta backup
- user: mysql
- minute: 0
- hour: '*/6'
- require:
- file: drcmeta_bak.sh
参考:http://docs.saltstack.com/en/latest/ref/states/all/salt.states.cron.html#salt.states.cron.present |