您的位置:首页 > 其它

SaltStack使用教程(三):定时任务管理cron.present

2015-09-30 23:40 405 查看
随着线上服务器增加,散乱分部在线上的定时任务也逐渐增加,经常出现找不到任务,任务丢失,这样就可以用到salt集中管理定时任务(这里不特指cron模块),下面会介绍到优点。
先举个cron模块添加任务例子:注释:这里虽然可以创建删除,但是作者不推荐这么用,管理复杂,推荐最下面的文件管理定时任务方法
[root@saltstack-node1 base]# vim ntp.sls
/usr/sbin/ntpdate pool.ntp.org >>/dev/null 2>&1:
cron.present:
- user: root
- minute: 10

[root@saltstack-node1 base]# salt 'saltstack-node2.example.com' state.highstate
saltstack-node2.example.com:
----------
ID: /usr/sbin/ntpdate pool.ntp.org >>/dev/null 2>&1
Function: cron.present
Result: True
Comment: Cron /usr/sbin/ntpdate pool.ntp.org >>/dev/null 2>&1 added to root's crontab
Started: 13:15:35.375887
Duration: 68.023 ms
Changes:
----------
root:
/usr/sbin/ntpdate pool.ntp.org >>/dev/null 2>&1
Summary
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
注解:
minute      #分钟
hour        #小时
daymonth    #日
month       #月
dayweek     #0~6是周一到周六,周日是7
默认执行用户“root”,时间不填写默认是“*”,周期执行“*/2”,随机执行“random”,identifier 是任务标识符,类似于任务ID,更改任务时指定“标识符”可方便修改。 现在就可以用salt查看定时任务[root@saltstack-node1
~]# salt 'saltstack-node2.example.com' cron.raw_cron root
saltstack-node2.example.com:
# Lines below here are managed by Salt, do not edit
# SALT_CRON_IDENTIFIER:sync_time
*/10 * * * * /usr/sbin/ntpdate pool.ntp.org >>/dev/null 2>&1
删除定时任务 假如你要添加一个“echo
"test"”的定时任务,结果发现添加错了[root@saltstack-node1
~]# salt '*' cron.set_job root '1' '*'
'*' '*' '*' echo "test"
saltstack-node2.example.com:
new
saltstack-node1.example.com:
new
You have new mail in /var/spool/mail/root
[root@saltstack-node1
~]# salt '*' cron.raw_cron root
saltstack-node1.example.com:
* * * * * /usr/sbin/ntpdate pool.ntp.org
# Lines below here are managed by Salt, do not edit
# test
1 * * * * echo
saltstack-node2.example.com: # Lines below here are managed by Salt, do not edit # SALT_CRON_IDENTIFIER:sync_time */10 * * * * /usr/sbin/ntpdate pool.ntp.org >>/dev/null 2>&1
# test
1 * * * * echo
需要这样写
salt      'target' cron.rm_job user  ${my_cron}  ${exec_crondtion}
[root@saltstack-node1 ~]# salt 'saltstack-node2.example.com' cron.rm_job root echo minute='1'
saltstack-node2.example.com:
removed
[root@saltstack-node1
~]# salt '*' cron.raw_cron root
saltstack-node1.example.com:
# Lines below here are managed by Salt, do not edit
# test
1 * * * * echo
saltstack-node2.example.com: # Lines below here are managed by Salt, do not edit # SALT_CRON_IDENTIFIER:sync_time */10 * * * * /usr/sbin/ntpdate pool.ntp.org >>/dev/null 2>&1

注释:这里虽然可以删除,但是作者不推荐这么用,推荐下面的文件管理定时任务方法


更合适的文件管理定时任务: 在linux里面一切皆文件,centos下是 /var/spool/cron/下的对应文件名就是用户的定时任务你可以通过管理这些文件来实现任务的管理,通过这些文件查看定时任务也一目了然,但是一定要注意文件权限和属主避免管理错误。
警告:由于是直接通过文件管理的任务,所以salt管理会完全覆盖原来配置的所有内容,所以请谨慎使用。
查看定时任务存在的形式:
[root@saltstack-node2 ~]# cd /var/spool/cron/
[root@saltstack-node2 cron]# ls
bai  root
[root@saltstack-node2 cron]# ll
total 8
-rw------- 1 bai  bai   22 Sep 30 15:17 bai    #这是bai这个用户的定时任务文件,600权限
-rw------- 1 root root 146 Sep 30 14:56 root

下面编写状态文件
[root@saltstack-node1 crontab]# vim test.sls
/var/spool/cron/bai:
file.managed:
- source: salt://crontab/files/saltstack-node2.example.com.bai
- mode: 600
- user: bai
- group: bai

执行状态
[root@saltstack-node1 crontab]# salt 'saltstack-node2.example.com' state.highstate
saltstack-node2.example.com:
----------
ID: /var/spool/cron/bai
Function: file.managed
Result: True
Comment: File /var/spool/cron/bai updated
Started: 15:40:33.193250
Duration: 57.914 ms
Changes:
----------
diff:
---
+++
@@ -1,0 +1,1 @@
+* * * * * echo "hello world"

Summary
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1

查看定时任务已创建
[root@saltstack-node1 crontab]# salt 'saltstack-node2.example.com' cron.raw_cron bai
saltstack-node2.example.com:
* * * * * echo "hello world"
You have new mail in /var/spool/mail/root

本文出自 “nginxs小白” 博客,请务必保留此出处http://nginxs.blog.51cto.com/4676810/1699698
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: