[SaltStack] Crontab部署

salt.states.cron

接着早上安静的时间, 在这里梳理下crontab相关的东东, 主要是crontab的统一管理维护, 包括新增, 修改, 下线等等.

下面就详细看下crontab的sls文件内容, 具体的测试就不在这里说了, 大家去玩玩好啦 -😃

  1. top文件(top.sls)

    base:
    '':
    - 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 '' 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 '' 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定义(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

posted @ 2015-07-03 08:23  Renolei  阅读(1474)  评论(0)    收藏  举报