原文链接:http://www.adminschoice.com/crontab-quick-reference/ 转载请注明译者及原文链接
在Unix和Solaris系统中设置计划任务
cron是一个unix和solaris系统的功能,主要用于通过cron dameon在后台按照一定的时间间隔来自动执行任务。这些任务在unix,solaris中通常被称作cron job。Crontab(CRON TABle)是一个文件,其中包含要运行的计划条目,以及运行的时间和次数。
本文包括了unix cron job如下几个方面的内容:
1,Crontab 限制
2,Crontab命令
3,Crontab文件——语法
4,Crontab实例
5,Crontab环境
6,Disable Email(取消邮件)
7,为cron活动生成日志
1,Crontab限制
如果你的用户名被包含在了/usr/lib/cron/cron.allow中,你就可以执行crontab。如果该文件不存在,只要你的用户名不在/usr/lib/cron.deny中,你也可以使用crontab。
只要cron.deny存在并且为空,所有的用户都可已使用crontab。如果这两个文件都不存在,则只有root用户可以使用crontab。allow/deny文件每行包含一个用户名。
2,Crontab 命令
export EDITOR=vi; 来打开crontab文件。
crontab -e 编辑crontab文件,如果其不存在,则会创建一个
crontab -l 显示crontab文件
crontab -r 删除crontab文件
crontab -v 展示上一次编辑的crontab文件(这个选项只在少数几个系统上可用)
3,Crontab文件
Crontab语法:
crontab文件中用五个字段来指定命令运行的时间间隔,以及天和日期。
* * * * * 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)
值域中的*表示所有的合法值。
每一列的值可以是*,也可以是以都好隔开的元素表。一个元素或者是上图所示范围内的一个数字,或者是以连字符隔开的两个数字(指代范围)
注意:
A.)所有的操作系统都不支持重复模式,如:/2表示每两分钟,/10表示每10分钟。
B.)指定运行在具体哪几天可以通过两个字段:month day 和 weekday。如果这两个字段都有了,他们的作用会叠加。
4,Crontab实例
crotab文件中的这一行表示在每天的下午6:30分从/home/someuser/tmp中移除所有临时文件:
30 18 * * * rm /home/someuser/tmp/*
像下面这样改变参数的值将会让命令按照不同的日程运行:
min | hour | day/month | month | day/week | Execution time |
30 | 0 | 1 | 1,6,12 | * | – 00:30 Hrs on 1st of Jan, June & Dec. |
0 | 20 | * | 10 | 1-5 | –8.00 PM every weekday (Mon-Fri) only in Oct. |
0 | 0 | 1,10,15 | * | * | – midnight on 1st ,10th & 15th of month |
5,10 | 0 | 10 | * | 1 | – At 12.05,12.10 every Monday & on 10th of every month |
注意:若是不小心输入了没有带参数的crontab命令,不要用control-d退出,因为这个命令会删除crontab文件中的所有条目,应该是用Control-c来退出。
5,Crontab环境
在shell中(/usr/bin/sh),cron从用户的HOME目录下调用命令。
cron为每个shell都提供了一个默认环境,定义如下:
HOME=user’s-home-directory
LOGNAME=user’s-login-id
PATH=/usr/bin:/usr/sbin:.
SHELL=/usr/bin/sh
想要自己的.profile执行的用户必须明确在crontab条目中或者被条目调用的脚本中指定。
6,取消邮件
默认情况下,cron job被执行时会向用户的账户发送一封邮件。如果想取消这个,可以在cron job的行尾加上:
>/dev/null 2>&1
7,生成日志文件
要得到cron的执行日志,可以这么做:
30 18 * * * rm /home/someuser/tmp/* > /home/someuser/cronlogs/clean_tmp_dir.log