[SaltStack] Crontab部署
salt.states.cron
接着早上安静的时间, 在这里梳理下crontab相关的东东, 主要是crontab的统一管理维护, 包括新增, 修改, 下线等等.
下面就详细看下crontab的sls文件内容, 具体的测试就不在这里说了, 大家去玩玩好啦 -😃
-
top文件(top.sls)
base: '<minion-id>': - crontab
-
crontab文件(init.sls)
date > /tmp/crontest: cron.present: - identifier: Reno_crontest - comment: Salt_crontest - user: root - minute: 7 - hour: 5
-
推送crontab内容, Example:
salt '<minion-id>' state.highstate
-
更新指定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 '<minion-id>' state.highstate
-
最后, 时间参数(例如: minute,hour等)可以随机化, 使用random代替具体的时间值, 如下sls文件:
date > /tmp/crontest: cron.present: - identifier: Reno_crontest3 - comment: Salt_crontest - user: root - minute: random - hour: 5 - daymonth: 20
推送更新后cron信息, 如下:
-
可以使用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定义(crontab 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定义(crontab 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
e.g.
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)
e.g.
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
这里比较重要的一点是, require参数: 表示改crontab部署是依赖file文件.
趁着早上整个人比较清醒, 简单的整理了下crontab的一些知识, 好了, 就到这里吧 -😃
早上OceanBase的升级顺利完成了, 吃点东西, 休息下, 准备去上班咯 -_-
From reno
2015-07-03 08:23:00
参考:http://docs.saltstack.com/en/latest/ref/states/all/salt.states.cron.html#salt.states.cron.present