crontab文件中包含了用于cron守候进程执行的一条或者多条指令,在每条指令中均会指明在指定的日期、指定的时间执行某个特定的命令。每个用户均拥有自己的crontab表。用户可以通过下述命令来编辑相应的crontab文件:
(1)crontab -u //用于设定某个用户的cron服务,一般root用户在执行该命令时需要该参数(2)crontab -l //列出属于某个用户的cron服务的详细内容
(3)crontab -r //删除属于某个用户的cron服务
(4)crontab -e //用于编辑某个用户的cron服务
在crontab文件中,空白行和前导的空格以及制表符均会被忽略。除去空白符,首个字符为“#”的行会被当作注释,并被忽略。一个有效的crontab行可以用于设定一个环境或者执行一个cron命令。其中,环境变量的设定具有如下形式:name = value。式中,赋值符号周围的空格是可选的,并且value中任何非前导空格均会被当作其值的一部分。字符串类型的值可以位于引号中,包括单引号和双引号,以便能够保留前导或者尾部的空格。
cron守候进程会自动设置一些环境变量。在默认情况下,SHELL将会被设置为/bin/sh,LOGNAME和HOME环境变量将会根据crontab所有者的/etc/passwd行中的值进行设定。HOME和SHELL这两个环境变量可以被覆盖,但是LOGNAME却不可以。
对于每行crontab命令,均由五个时间/日期字段构成,后跟一个用户名(如果这是一个系统crontab文件),后跟将要执行的命令。cron每分钟便会检查crontab文件中的条目,以便及时执行合适的命令。crontab文件中时间和日期字段为:
字段名称 | 允许的值 |
minute(分钟) | 0-59 |
hour(小时) | 0-23 |
day of month(每月中第几天) | 1-31 |
month(月) | 1-12(或指定月的名称) |
day of week(每周中星期几) | 0-7(0和7表示星期日,或者使用名称) |
在指定取值区间时,可以指定步长值,例如:0-23/2,表示每两个小时执行一次。同时,可以在一个“*”符号后指定一个步长值。除去上述五个时间和日期字段,每行中的剩余部分(直至新的一行或者“%”符号)便是将要执行的命令。该命令将由/bin/sh或者由SHELL环境变量指定的shell来执行。命令中的“%”符号将会被转换为换行符号。除非使用“\”字符进行转义,否则“%”符号之后的所有数据将会被发送给该命令作为标准输入。
同时,需要注意的是:命令中的“天”可以通过两个字段来指定:(1)月中的天(day of month);(2)星期中的天(day of week)。如果这两个字段均被限定,命令将会在匹配两者任一的时间上执行。例如:30 4 1,15 * 5将会使得指定的命令在每月的1日和15日执行,另外加上每周的周五。而5 0 * * * $HOME/bin/daily.job >> $HOME/temp/out 2>&1表明命令将会在每天的00:05分执行。