注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

一线天色 天宇星辰

天下武功,唯快不破

 
 
 

日志

 
 

Linux下Crontab定时任务的使用  

2012-07-01 19:22:10|  分类: 计算机 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

. Crontab 介绍

    crontab命令的功能是在一定的时间间隔调度一些命令的执行。

1.1 /etc/crontab 文件

    /etc目录下有一个crontab文件,这里存放有系统运行的一些调度程序。每个用户可以建立自己的调度crontab

 

[root@performance ~]# cat /etc/crontab  

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

HOME=/

 

# run-parts

01 * * * * root run-parts /etc/cron.hourly

02 4 * * * root run-parts /etc/cron.daily

22 4 * * 0 root run-parts /etc/cron.weekly

42 4 1 * * root run-parts /etc/cron.monthly

[root@performance ~]#

1.2 /etc/cron.deny /etc/cron.allow 文件

/etc/cron.deny 表示不能使用crontab 命令的用户

/etc/cron.allow 表示能使用crontab的用户。

如果两个文件同时存在,那么/etc/cron.allow 优先。

如果两个文件都不存在,那么只有超级用户(ROOT)可以安排作业。

每个用户都会生成一个自己的crontab 文件。这些文件在/var/spool/cron目录下:

如:

[root@performance cron]# pwd

/var/spool/cron

[root@performance cron]# ll

总计 8

-rw------- 1 root root 46 05-16 16:40 root

[root@performance cron]#我们直接查看这个文件,里面的内容和对应用户显示的crontab -l 一致。因为我只有一个root账户,因此只有一个root

[root@performance cron]# cat root

* */24 * * * /usr/sbin/ntpdate 192.168.24.101

[root@performance cron]#

打开这个文件,我们看到,目前只有一个定时任务在执行,是每24小时执行一次ntp服务器时间校准

. Crontab 使用说明

2.1 Crontab语法

usage: crontab [-u user] file

crontab [-u user] [ -e | -l | -r ]

(default operation is replace, per 1003.2)

-e (edit user's crontab)

-l (list user's crontab)

-r (delete user's crontab)

-i (prompt before deleting user's crontab)

-s (selinux context)

    其中,file是命令文件的名字。如果在命令行中指定了这个文件,那么执行crontab命令,则将这个文件拷贝到crontabs目录下;如果在命令行中没有制定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将他们也存放在crontab目录下。

2.2 Crontab 格式说明

    我们可以用crontab -e 添加要执行的命令。 命令执行的结果,无论是标准输出还是错误输出,都将以邮件形式发给用户。

   

添加的命令必须以如下格式:

* * * * * /command path

   

    前五个字段可以取整数值,指定何时开始工作,第六个域是字符串,即命令字段,其中包括了crontab调度执行的命令。 各个字段之间用spacestabs分割。

5个字段分别表示:

    分钟:0-59

    小时:1-23

    日期:1-31

    月份:1-12

    星期:0-60表示周日)

还可以用一些特殊符号:

    * 表示任何时刻

    ,: 表示分割

  -:表示一个段,如第二端里: 1-5,就表示15

    /n : 表示每个n的单位执行一次,如第二段里,*/1, 就表示每隔1个小时执行一次命令。也可以写成1-23/1.

一些示例

00 8,12,16 * * * /data/app/scripts/monitor/df.sh

30 2 * * * /data/app/scripts/hotbackup/hot_database_backup.sh

10 8,12,16 * * * /data/app/scripts/monitor/check_ind_unusable.sh

10 8,12,16 * * * /data/app/scripts/monitor/check_maxfilesize.sh

10 8,12,16 * * * /data/app/scripts/monitor/check_objectsize.sh

43 21 * * *                 21:43 执行

15 05 * * *               05:15 执行

0 17 * * *                  17:00 执行

0 17 * * 1                  每周一的 17:00 执行

0,10 17 * * 0,2,3           每周日,周二,周三的 17:00 17:10 执行

0-10 17 1 * *               毎月1日从 17:007:10 毎隔1分钟 执行

0 0 1,15 * 1                毎月1日和 15日和 一日的 0:00 执行

42 4 1 * *                毎月1日的 4:42 执行

0 21 * * 1-6              周一到周六 21:00 执行

0,10,20,30,40,50 * * * *    每隔10 执行

*/10 * * * *            每隔10 执行

* 1 * * *           1:01:59 每隔1分钟 执行

0 1 * * *           1:00 执行

0 */1 * * *          毎时0 每隔1小时 执行

0 * * * *           毎时0 每隔1小时 执行

2 8-20/3 * * *          8:02,11:02,14:02,17:02,20:02 执行

30 5 1,15 * *         1 15日的 5:30 执行

编辑完成后重启Crontab服务即可

[root@performance ~]# service crond restart

停止 crond                                              [确定]

启动 crond                                              [确定]

[root@performance ~]#

注意事项

         Linuxcrontab并不像Java里面的那么精确,Linux中的只能精确到分钟级别,而java 中可以精确到秒级别,如需更精确的,还是使用Java提供的服务吧!详情请参考我写的另一片博文《作业调度与定时任务小结》中的方案三。

  评论这张
 
阅读(1016)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017