Crontab 笔记

| 10 Comments

关于 Crontab ,维基百科上的词条 Crontab非常好。可惜这个地址在国内不用代理访问不到。

虽然关于 Crontab 的介绍到处都是,详细读了一遍这个词条,收获还是有的。Crontab 这个名字来自 "chronos",一个古希腊语, “时间”的意思.

常见陷阱

每个SA、DBA 或者是普通的 Unix 用户,在第一次使用 Crontab 的时候都会遇到问题. 运行 Crontab 的常见错误包括如下几种:

1) 出于测试目的新创建了一条 Cron JOB, 时间间隔必须超过两分钟,否则 JOB 将调度不到。如果必须忽略这两分钟的载入配置时间差,可以通过重新启动 Cron Daemon 做到。

2) 从 Crontab 中启动 X Window 程序需要注意的事项:所以要么在程序前初始化 "DISPLAY=:0.0", 要么在应用程序后面追加参数 --display :0.0

3) 命令中的 % 必须做转义处理: \% .我个人的意见是不要在命令行里带这个参数,干脆写到脚本里,然后调度该脚本即可。

其实我倒是认为使用 Crontab 最常见的一个问题往往是因为环境变量不对。经常会看到论坛里有人问:为什么我的 Crontab 创建了不执行? 准备创建一条 Cron JOB 的时候,很多人都喜欢在命令行下运行一遍,因为这个时候环境变量是随着 Shell 自动带进来,在 Crontab 中则可能因为找不到正确的环境变量,JOB 就不能执行。这个小问题就像出天花,一次教训之后就都记得了。

必须使用的一则技巧

每条 JOB 执行完毕之后,系统会自动将输出发送邮件给当前系统用户。日积月累,非常的多,甚至会撑爆整个系统。所以每条 JOB 命令后面进行重定向处理是非常必要的: >/dev/null 2>&1 。前提是对 Job 中的命令需要正常输出已经作了一定的处理, 比如追加到某个特定日志文件。

附: Crontab 的格式说明如下:

* 逗号(',') 指定列表值。如: "1,3,4,7,8"
* 中横线('-') 指定范围值 如 "1-6", 代表 "1,2,3,4,5,6"
* 星号 ('*') 代表所有可能的值

Linux(开源系统似乎都可以)下还有个 "/" 可以用. 在 Minute 字段上,*/15 表示每 15 分钟执行一次. 而这个特性在商业 Unix ,比如 AIX 上就没有.

# Use the hash sign to prefix a comment
# +---------------- minute (0 - 59)
# |  +------------- hour (0 - 23)
# |  |  +---------- day of month (1 - 31)
# |  |  |  +------- month (1 - 12)
# |  |  |  |  +---- day of week (0 - 7) (Sunday=0 or 7)
# |  |  |  |  |
# *  *  *  *  *  command to be executed

10 Comments

大多数cron的实现都支持通过 MAIL 环境变量定义邮件接收地址,如果不想要邮件,在cron job file开始 MAIL="" 就可以了,不过这是个很糟的习惯。

。。。。是MAILTO,不是MAIL

事实上,Linux和freeBSD使用的是同一种(由Paul Vixie写的)cron包,包含了增强格式。freeBSD上甚至还支持特殊字符串代替整个调度字段 (@reboot, @weekly, @hourly ...)

Vixie cron 支持 mailto ,传统的cron 不支持

最近也刚好在看这个东西.谢谢分享.

請問一下,有關crontab環境變量的問題,不知道怎樣才是正確的環境變量設定方式?是與.profile相關嗎?還希望您指點一二,謝謝。

出于测试目的新创建了一条 Cron JOB, 时间间隔必须超过两分钟

crond不是应该1分钟去检查一下配置文件吗?

@cocobear

一分钟检查一次,才要你两分钟去执行

但是我试过crontab是可以每分钟执行命令的啊。
我简单的试了一下
*/1 * * * * date >>/tmp/date

难道是环境不一样?

找东西总会找到Fenng大哥这里来,哈哈,很受教.

关于本文

This page contains a single entry by Fenng published on April 1, 2007 12:47 PM.

在牛博的镜像开通 was the previous entry in this blog.

Unix 速成小法 is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.