Saltstack:Crontab部署

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(nameuser='root'minute='*'hour='*'daymonth='*'month='*',dayweek='*'comment=Noneidentifier=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


阅读更多
换一批

没有更多推荐了,返回首页