日期:2014-05-16  浏览次数:20690 次

Linux系统的计划任务Crontab及实例

在Linux系统的实际使用中,可能会经常碰到让系统在某个特定时间执行某些任务的情况,特别是在服务器中则更为常见,我今天也对这个计划任务做了一个复习,收集了一些关于计划任务的实例,现把相关内容分享出来,同时给自己一个备忘。
费话不多说,下面开始今天的内容

?

格式说明

在RHEL6中,/etc/crontab文件有下面的注释
# Example of job definition:
# .---------------- minute (0 - 59)
# |? .------------- hour (0 - 23)
# |? |? .---------- day of month (1 - 31)
# |? |? |? .------- month (1 - 12) OR jan,feb,mar,apr ...
# |? |? |? |? .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |? |? |? |? |
# *? *? *? *? *? command to be executed

特殊的符号说明

上面是英文,我想大家也很明白,下面我们来看一些特殊的符号
"*"代表所有的取值范围内的数字。特别要注意哦!
"/"代表每的意思
"*/5"表示每5个单位
"-"代表从某个数字到某个数字
","分散的数字

特别提醒

大家可能分不清用crontab -e编辑和直接编辑/etc/crontab有什么不一样?这就是我要特别提醒大家的地方:
1、/etc/crontab这个里面的计划任务是系统中的计划任务
2、crontab -e是用来编辑某个用户的计划任务
3、每条命令执行完毕之后,系统会自动将输出发送邮件给当前系统用户。日积月累,非常的多,甚至会撑爆整个系统。所以每条命令命令后面进行重定向处理是非常必要的: >>/dev/null 2>&1
4、每次编辑完某个用户的cron设置后,cron自动在/var/spool/cron下生成一个与此用户同名的文件,此用户的cron信息都记录在这个文件中,这个文件是不可以直接编辑的,只可以用crontab -e 来编辑。
5、cron启动后每过一份钟都会读取/var/spool/cron/username和/etc/crontab这两个文件,检查是否要执行里面的命令。因此此文件修改后不需要重新启动cron服务。
6、在默认情况下,如果cron每执行一次指令后,都会向用户的本地信箱中发送邮件,时间长了则产生数量很多的邮件。那么如何禁止掉呢?可能通过下面的方法来实现
■.将执行命令的信息重定向到
cron_command >/dev/null 2>&1
■.将执行命令的信息重定向到
cron_command &>/dev/null
■.在crontab设置文件中指定发送到得邮件
MAILTO=""

一些常见的实例

0 6 * * *? #每天早上6点
0 */2 * * *? #每两个小时
0 23-6/2,8 * * *? #晚上23点到早上6点之间每两个小时,早上八点
0 11 4 * 1-3?? #每个月的4号和每个星期的星期一到星期三的早上11点
30 21 * * *??? #每晚的21:30
45 4 1,10,22 * *??? #每月1、10、22日的4:45
10 1 * * 6,0? #每周六、周日的1 : 10
0,30 18-23 * * *?? #每天18:00至23:00之间每隔30分钟
0 23 * * 6? #每星期六的23:00
* */1 * * *? #每一小时
* 23-7/1 * * *? #晚上11点到早上7点之间,每隔一小时
0 11 4 * mon-wed?? #每月的4号与每周一到周三的11点
0 4 1 jan *? #一月一号的4点