【原文】http://www.adminschoice.com/crontab-quick-reference
cron是一个Unix,Solaris的工具,它可以在后台自动执行任务。这些任务在Unix,Solaris中通常被称为“cron jobs”。crontab(CRON TABle)是一个文件,用于设置cron任务的计划。
这篇文档主要包括Unix cron jobs的以下方面:
- crontab的限制
- crontab命令
- crontab文件 - 语言
- 例子
- 环境变量
- 关闭Email
- 生成日志
1. crontab的限制
如果 /usr/lib/cron/cron.allow 存在,并且你的用户名在这个文件中,说明你有权执行crontab。
否则,看 /usr/lib/cron/cron.deny 是不是有你的用户名。如果没有,那么你也可以执行crontab。
如果只有 cron.deny 存在,并且它是空,那么所有用户都可以执行crontab。
如果 cron.deny 和 cron.allow 都不存在,那么只有root用户可以执行crontab。
allow/deny文件的每一行表示一个user。
2. crontab命令
可以用 export EDITOR=vi 来指定打开crontab文件的编辑器。
crontab -e 编辑crontab文件,如果不存在就创建一个新的
crontab -l 显示crontab文件
crontab -r 删除crontab文件
crontab -v 显示上一次编辑的crontab文件(这个选项只有少数系统可以用)
3. crontab文件
crontab语法:
crontab文件包含5个指定时间、日期的域和一个将被定时执行的命令
* * * * * command to be executed
- - - - -
| | | | |
| | | | +----- day of week (0 - 6) (Sunday=0)
| | | +------- month (1 - 12)
| | +--------- day of month (1 - 31)
| +----------- hour (0 - 23)
+------------- min (0 - 59)
上图中,一个星号(*)即代表一列(一个值域),它的值可以是括号中指定的值。
每一列的值可以是一个星号(*)或者一个以逗号分隔的元素列表。元素可以是一个数字(括号中指定的范围中的数字),也可以是用连字符(-)连接的2个数字,表示一个范围(如,1-4)。
注意
A) crontab不支持重复模式,如果想用 /2 表示每2分钟, /10 表示每10分钟,crontab就会报错。
B) 指定日期有2种方式,每个月中的第几天,或一周中的第几天。如果2个位都被置了,那么两都都会生效。
4. 例子
crontab文件中的一行,如下所示,表示“每天下午6:30,删除 /home/someuser/tmp 下的所有文件”
30 18 * * * rm /home/someuser/tmp/*
分 | 时 | 日(月) | 月 | 日(周) | 执行时间 |
---|---|---|---|---|---|
30 | 0 | 1 | 1,6,12 | * | 1月1日,6月1日和12月1日的 00:30 |
0 | 20 | * | 10 | 1-5 | 10月的每周一至周五,每天晚上8点 |
0 | 0 | 1,10,15 | * | * | 每月1日,10日和15日的0点 |
5,10 | 0 | 10 | * | 1 | 每周一及每月10日的00:05和00:10 |
5. 环境变量
cron执行时,所在路径是用户的HOME目录。
cron提供一些默认的环境变量:
HOME=用户的HOME目录
LOGNAME=用户登录的ID
PATH=/usr/bin:/bin
SHELL=/bin/sh
用户如果想执行.profile必需在脚本中手动执行。
【译注】
A) 上面的环境变量PATH和SHELL,在我的环境中跟原文的不太一样,这里写的是我环境里的值。
B) 我在脚本里手动source .profile也没有用,只能手动设置一些需要的环境变量。
6. 关闭Email
默认情况下,cron jobs发一封邮件给用户。如果不需要,可以在行尾添加 >/dev/null 2>&1 。
7. 生成日志
下面的命令可以收集脚本中的日志:
30 18 * * * rm /home/someuser/tmp/* > /home/someuser/cronlogs/clean_tmp_dir.log
============================== 分割线 ==============================
第一次做翻译的工作。觉得这篇东西比较简单,尝试一下。感觉翻译得还是比较生硬。主要是读书时,英语翻译的要求是“直译”,再加上中文水平实在有限,生硬是必然的。
今后多多努力。