[SaltStack] Crontab部署

salt.states.cron

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

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

  1. top文件(top.sls)

     base:
       '<minion-id>':
          - 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 '<minion-id>' 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 '<minion-id>' 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  阅读(1456)  评论(0)    收藏  举报