crontab介绍
   crontab命令的功能是在一定的时间间隔调度一些命令的执行.当安装完操作系统之后,默认便会启动此任务调度命令.crontab命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作.

使用权限 : 所有使用者

根用户以外的用户可以使用 crontab 工具来配置 cron 任务。所有用户定义的 crontab 都被保存在/var/spool/cron 目录中,并使用创建它们的用户身份来执行。要以某用户身份创建一个 crontab 项目,登录为该用户,然后键入 crontab -e 命令,使用由 VISUAL 或 EDITOR 环境变量指定的编辑器来编辑该用户的 crontab。该文件使用的格式和 /etc/crontab 相同。当对 crontab 所做的改变被保存后,该 crontab 文件就会根据该用户名被保存,并写入文件 /var/spool/cron/username 中。

cron 守护进程每分钟都检查 /etc/crontab 文件、etc/cron.d/ 目录、以及 /var/spool/cron 目录中的改变。如果发现了改变,它们就会被载入内存。这样,当某个 crontab 文件改变后就不必重新启动守护进程了。

1.、/etc/crontab文件说明
   在/etc目录下有一个crontab文件,这里存放有系统运行的一些调度程序;每个用户可以建立自己的crontab调度,这些文件在/var/spool/cron目录下.

2、/var/spool/cron/文件说明
 每个系统用户都可以有自己的crontab文件,在/var/spool/cron/目录下.如果你是root用户,那下面有个root文件,建议日常备份,避免误删除导致crontab 文件丢失

3、.日志文件位置

默认情况下,crontab中执行的日志写在/var/log下,如:
#ls /var/log/cron*
/var/log/cron /var/log/cron.1 /var/log/cron.2 /var/log/cron.3 /var/log/cron.4

crontab的日志比较简单,当crond执行任务失败时会给用户发一封邮件。

4、使用方法

在"crontab -e"命令格式任何值中星号(*)可以用来代表所有有效的值,例如:月份值中的星号(*)意味着在满足其它制约条件后每月都执行该命令.
整数间的短线(-)指定一个整数范围,例如:1-5意味着整数1,2,3,4,5.
用逗号(,)隔开的一系列值指定一个列表,例如:2,3,5,8,9表明这5个指定的整数.
正斜线(/)可以用来指定间隔频率,在范围后加上/意味着在范围内可以跳过integer,例如:0-59/2可以用来在分钟字段定义每两分钟.
间隔频率值还可以和星号一起使用,例如:*/3的值可以用在月份字段中表示每三个月运行一次任务.
开头为井号(#)的行是注释,不会被处理.


如当前是root身份,要查看/编辑/删除某用户的crontab,只需在相应的命令后加上-u USERNAME(如编辑用户tom的crontab # crontab -e -u tom)即可.

注意 :

当程序在你所指定的时间执行后,系统会寄一封信给你,显示该程序执行的内容,若是你不希望收到这样的信,请在每一行空一格之后加上 > /dev/null 2>&1 即可,如下

18 1 * * * root tar cf /home/Sunrier/bak/bak.tar /home/Sunrier/log >> /dev/null 2>&1
上面这句将在每天的凌晨1点18分(01:18)运行tar备份命令

http://www.centoscn.com/CentOS/help/2014/0820/3524.html

http://www.centoscn.com/CentOS/2014/0924/3835.html

http://www.cnblogs.com/itech/archive/0001/01/01/1525590.html

http://blog.csdn.net/sunrier/article/details/7848225

http://blog.csdn.net/ethanzhao/article/details/4406017

疑惑问题

1、打开 vi /etc/crontab文件看到添加格式是“时间+用户名+命令”格式,但照此格式使用命令cront -e添加任务 "00 02 * * *  root  /root/shell/qqtim.sh",没有按时执行,查看日志/var/log/cron那个时间点实际是运行了任务,但是在此有个root屏蔽了后面的脚本正常执行,删除“root”运行正常。两个地方添加计划任务的不同一定要注意。

2、CentOS 5 /etc/crontab 中定义了每小时、每天,,等的具体执行时间,但 CentOS6 的此文件没有此内容,那么它的这些值在哪儿定义的呢?

# run-parts
01 * * * * root run-parts /etc/cron.hourly
01 0 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

原先的Linux中是在/etc/crontab中直接调用cron.{daily,weekly,monthly}等文件,但是现在的Linux为了不和anacron冲突,所以不再直接在/etc/crontab文件中调用cron.{daily,weekly,monthly}。而是通过anacron来调用这几个定时执行文件。
    不过这个对使用者来讲没有什么区别,我们还是可以直接把需要每天执行的任务写成脚本,然后保存在/etc/cron.daily/目录中,还是会每天执行的。

RHEL6 / CentOS6 的都定义在 /etc/anacrontab 中。

+++++zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz++++++++++++++++++++

相关知识:

“&1 file"与 "> file 2>&1"区别
1)cat food 2>&1 >file :错误输出到终端,标准输出被重定向到文件file。
2)cat food >file 2>&1 :标准输出被重定向到文件file,然后错误输出也重定向到和标准输出一样,所以也错误输出到文件file。

定时任务执行成功or失败时,程序会向上层发送mail,由于平时工作中不打开sendmail功能,所以邮件会存储在临时目录/var/spool/clientmqueue,随着执行的任务次数多,文件也会越来越多,直到某一天,添加文件时,提示No space left on device主要问题原因不在于垃圾文件会占很大空间,而在于每个文件会占用inode节点。centos6.4默认不装sendmail,可能不会导致这个问题发生)。

所以crontab规则后需加 /dev/null 2>&1。比如:

*/5 * * * * /sbin/ntpdate time.windows.com>/dev/null 2>&1

30 4 * * * /bin/shtar_mysql.sh >/dev/null 2>&1 

注:>>  >/dev/null 2>&1不可同时存在,不然无法执行,比如:

*/1 * * ** echo yangrong >>/var/log/yy > /dev/null 2>&1

每隔一分钟把yangrong打印到yangrong1文件中,但该命令无法执行,因为>>>/dev/null不可同时使用

技术延伸:

如何能在输出信息的同时把信息记录到文件中?
  我们在上面的例子中可以看到,我们使用输出转向,命令在终端上的输出转向到了文件中,但如果我希望能同时在终端上看到输出信息怎么办?
  我们可以使用这个命令: tee
  解释一下tee的作用:
  read from standard input and write to standard output and files
  它从标准输入读取内容并将其写到标准输出和文件中

[lhd@hongdi ~]$ ls | tee ls_tee.txt

//显示当前目录文件并把列出的文件输出到ls_tee.txt文件中,注意执行一次就会覆盖该文件,如果需要保持源文件,则tee加参数"-a"--append即可。