cron资源

主要用来管理操作系统的定时任务(即crontab),之前文章也写过一个cron模块举例,计划任务并非都要使用cron资源,linux下只要将一个文件放置/var/spool/cron目录下其实crontab就会执行,之前的文章也是这样写的.


cron资源属性:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
cron  'resource title' :
   name        =>  # (namevar) The symbolic name of the cron job.  This name is 
   ensure      =>  # The basic property that the resource should be...
   command      =>  # The command to execute in the cron job.  The...
   environment =>  # Any environment settings associated with this...
   hour        =>  # The hour at which to run the cron job. Optional; 
   minute      =>  # The minute at which to run the cron job...
   month       =>  # The month of the year.  Optional; if specified...
   monthday    =>  # The day of the month on which to run the...
   provider    =>  # The specific backend to use for this `cron...
   special     =>  # A special value such as 'reboot' or 'annually'...
   target      =>  # The name of the crontab file in which the cron...
   user        =>  # The user who owns the cron job.  This user must...
   weekday     =>  # The weekday on which to run the command...
   # ...plus any applicable metaparameters.
}


参数注释:

command:crontab要执行的命令,由于环境变量的问题,建议调用命令时使用绝对路径,或指定cron资源的environment属性.


ensure:指定该资源是否启用,可设置present值表示启用,设置absent值表示关闭.


environment:在crontab环境里指定环境变量,如PATH=/bin:/usr/bin:/usr/sbin.也可以通过:导入更多环境变量.


hour:运行crontab的小时,可设置成0-23,单位是小时.


minute:运行crontab的分钟,可设置为0-59,单位是分钟.


month:设置crontab运行的月份,可设置成1-12,单位是月.


monthday:一个月中的哪一天,可设置成1-31,单位是日.


weekday:运行crontab的星期数,可设置为0-7,单位是天.


name:crontab的注释,注释用于帮助管理员区分不同的crontab.


provider:默认是系统自带的crontab程序,通常不需要指定此参数值,puppet会默认匹配系统自带的定时管理任务程序.


user:将crontab加入某一个系统账号中,默认是加入执行守护进程的系统账户中.



示例一:

定义crontab计划任务同步ntpdate服务器时间.


定义ntpdate类,做计划任务.

1
2
3
4
5
6
7
8
class  cron ::ntpdate {
     cron  { "ntpdate" :
         ensure => present,
         command  =>  '/usr/sbin/ntpdate 1.cn.pool.ntp.org' ,
         user =>  'root' ,
         minute =>  '*/5' ,
     }
}

node节点中添加此计划任务.

1
2
3
4
5
6
7
8
9
10
11
node  /sh- (proxy|web)\d+/  inherits base {
     case  $:: hostname  {
         /sh-proxy \d+/: {
              include nginx
           }
          "sh-web1" : {
             include haproxy
             include  cron ::ntpdate
            
         }
}

客户端同步ntpdate.

1
2
3
4
5
6
7
8
9
10
[root@sh-web1 haproxy] # puppet agent -t
Notice: Ignoring --listen on onetime run
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Loading facts
Info: Caching catalog  for  sh-web1.localdomain
Info: Applying configuration version  '1508433121'
Notice:  /Stage [main] /Admin/Exec [selinux] /returns : executed successfully
Notice:  /Stage [main] /Cron ::Ntpdate /Cron [ntpdate] /ensure : created
Notice: Finished catalog run  in  0.43 seconds


查看计划任务.

1
2
3
4
5
6
7
[root@sh-web1 haproxy] # crontab -l
# HEADER: This file was autogenerated at Fri Oct 20 01:12:02 +0800 2017 by puppet.
# HEADER: While it can still be managed manually, it is definitely not recommended.
# HEADER: Note particularly that the comments starting with 'Puppet Name' should
# HEADER: not be deleted, as doing so could cause duplicate cron jobs.
# Puppet Name: ntpdate
* /5  * * * *  /usr/sbin/ntpdate  1.cn.pool.ntp.org


示例二:


做一个ping计划任务,每天的2,4点执行ping,注意使用"[]".

1
2
3
4
5
6
7
8
9
10
11
12
node  /sh- (proxy|web)\d+/  inherits base {
     case  $:: hostname  {
         /sh-proxy \d+/: {
              include nginx
           }
          "sh-web1" : {
             include haproxy
             include  cron ::ntpdate
             include  cron :: ping
        
     }
}

1
2
3
4
5
6
7
class  cron :: ping  {
     cron  { "ping" :
         command  =>  'ping -c1 www.baidu.com 2>&1 >> /dev/null' ,
         user    =>  'root' ,
         hour    => [2, 4],
     }
}


客户端执行:

1
2
3
4
5
6
7
8
9
10
[root@sh-web1 haproxy] # puppet agent -t
Notice: Ignoring --listen on onetime run
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Loading facts
Info: Caching catalog  for  sh-web1.localdomain
Info: Applying configuration version  '1508433611'
Notice:  /Stage [main] /Admin/Exec [selinux] /returns : executed successfully
Notice:  /Stage [main] /Cron ::Ping /Cron [ ping ] /ensure : created
Notice: Finished catalog run  in  0.42 seconds


crontab计划任务查看:

1
2
3
4
5
6
7
8
9
[root@sh-web1 haproxy] # crontab -l
# HEADER: This file was autogenerated at Thu Oct 19 17:19:52 +0800 2017 by puppet.
# HEADER: While it can still be managed manually, it is definitely not recommended.
# HEADER: Note particularly that the comments starting with 'Puppet Name' should
# HEADER: not be deleted, as doing so could cause duplicate cron jobs.
# Puppet Name: ntpdate
* /5  * * * *  /usr/sbin/ntpdate  1.cn.pool.ntp.org
# Puppet Name: ping
* 2,4 * * *  ping  -c1 www.baidu.com 2>&1 >>  /dev/null


示例三:

执行ping计划任务,每天2-4之间,每隔10分钟执行一次.

1
2
3
4
5
6
7
8
class  cron :: ping  {
     cron  { "ping" :
         command  =>  'ping -c1 www.baidu.com 2>&1 >> /dev/null' ,
         user    =>  'root' ,
         hour    => [ '2-4' ],
         minute  =>  '*/10' ,
     }
}

客户端更新:

1
2
3
4
5
6
7
8
9
10
11
[root@sh-web1 haproxy] # puppet agent -t
Notice: Ignoring --listen on onetime run
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Loading facts
Info: Caching catalog  for  sh-web1.localdomain
Info: Applying configuration version  '1508433856'
Notice:  /Stage [main] /Admin/Exec [selinux] /returns : executed successfully
Notice:  /Stage [main] /Cron ::Ping /Cron [ ping ] /minute : defined  'minute'  as  '*/10'
Notice:  /Stage [main] /Cron ::Ping /Cron [ ping ] /hour : hour changed  '2,4'  to  '2-4'
Notice: Finished catalog run  in  0.36 seconds


计划任务查看.

1
2
3
4
5
6
7
8
9
[root@sh-web1 haproxy] # crontab -l
# HEADER: This file was autogenerated at Thu Oct 19 17:23:56 +0800 2017 by puppet.
# HEADER: While it can still be managed manually, it is definitely not recommended.
# HEADER: Note particularly that the comments starting with 'Puppet Name' should
# HEADER: not be deleted, as doing so could cause duplicate cron jobs.
# Puppet Name: ntpdate
* /5  * * * *  /usr/sbin/ntpdate  1.cn.pool.ntp.org
# Puppet Name: ping
* /10  2-4 * * *  ping  -c1 www.baidu.com 2>&1 >>  /dev/null