crontab的原理及使用

#!/bin/sh

CRONTAB_COMMAND="* * * * * /usr/local/watch/start_watch.sh"

echo  "${CRONTAB_COMMAND}" >> /var/spool/cron/tabs/root

 

======================================================

 

在过去cron 仅仅牵涉到一两个文件的时候比较简单,你只需要编辑下文件,然后cron做剩下所有的工作。现在cron变成好几个文件和 好几个程序,看起来比较复杂,幸好有人做了一个简单的界面来应付新的复杂性。

 

Cron 实际上是两个独立的程序。Cron damon, 或者叫做cron ,crond 它是伴随系统一起启动的常驻程序

 

来检查是否cron 在系统上运行, 用ps 命令 和 grep 过滤所需内容:

 

ps -ef|grep cron 

root    387      1   0   Jun 29 ?     00:00:00 crond 

root  32304  20607   0   00:18 pts/0  00:00:00 grep cron 

 

进程 crond 每分钟激活一次,检查cron 文件列表,那里面记录着什么程序应该在什么时间来运行。如果有程序需要运行,它启动他们然后继续休眠,你不需要关系cron的运行机制,只需要知道它在运行,并且不停地轮询cron 任务列表。

 

在上面例子中, crond 的进程号是 387. 进程号为32304 的是grep程序,用来在ps的输出中定位cron的信息

 

The cron 列表文件 随系统的不同可能不同,但通常由下面的东西组成 :

在 /var/spool/cron 或者 /var/spool/cron/crontabs

 

这些文件是利用cron 的用户建立的,每一个文件使用了用户名字信息,你总能发现 一个root 文件 在 /var/spool/cron/root 。如果有一个叫jinx的用户使用了cron 那么一定存在一个 文件/var/spool/cron/jinx

 

ls -l /var/spool/cron 

-rw-------   1  root    root          3768 Jul 14  23:54  root 

-rw-------   1  root    group          207 Jul 15  22:18  jinx 

 

一个cron文件 可能会叫 /etc/crontab ,那是原来cron表文件 原始的名字

 

在目录 /etc/cron.d 中的任何文件

每一个cron 表文件在系统中 有不同的作用,作为一个用户,你可以建立或者编辑 在 /var/spool/cron 中的自己账户文件。

 

cron的另一部分是 表 编辑器, crontab ,它用来编辑 /var/spool/cron 目录中的文件。crontab 自己知道哪的文件需要修改,能让事情变的更简单。

 

crontab 辅助工具有三个选项: -l , -r , -e . 

-l 选项 列出当前 userid 文件中的 任务列表。

-r 选项 删除一个 cron 表文件

-e 编辑 文件

 

cron 表 由以行为单位的 入口项组成, 一个入口由两部分组成 : 执行命令的时间   和  要执行的命令

 

一行 包含 6个 区域, 如果 “#” 开头 ,将被作为注释。 六个域必须 由 空格 或 tabs键分割

 

1. 一小时中哪一分钟执行(0-59) 

2. 一天中哪一小时执行(0-23) 

3. 一月中哪一天     (0-31) 

4. 一年中的哪一年 (1-12) 

5. 每星期的哪一天执行  (0-6) (0=Sunday) 

6. 要执行的命令

 

上面五个 是 什么时间运行, 最后是 要执行的命令

 

一个入口项的前五列 可以由下面的规则组成: 

 

 

一个范围中的一个数字 

一个范围中的 一个时间范围; 例如, 2-10 

一串由 “,”分割的 时间点或范围  例如: 1,2,3-7,8 

一个 “*” 代表所有的 合法的时间 

 

列表或 时间 区间  中间不能有空格, 空格保留为 域的分割符

 

下面是用  crontab -l 命令列出的一个 简单的 cron 表文件:

 

1     $ crontab -l 

2     # DO NOT EDIT THIS FILE 

3     # installed Sat Jul 15 

4     #min    hr   day   mon   weekday  command 

6     30      *     *     *     *       some_command 

7     15,45   1-3   *     *     *       another_command 

8     25      1     *     *     0       sunday_job 

9     45      3     1     *     *       monthly_report 

10    *       15    *     *     *       too_often 

11    0       15    *     *     1-5     better_job 

 

 

第二和第四行 前面有“#” 所以被作为注释.第六行运行 命令 some_command 每小时的30分时运行. 小时,天,月,年,周 都是 “*”  。

第七行运行   another_command 在 每天 凌晨1--3点 的 15, 45分钟运行,  就是, 1:15, 1:45, 2:15, 2:45, 3:15, and 3:45 a.m. 

 

第8行 在 周日的 凌晨 1:25 运行sunday_job

 

第九行 每月第一天的 3:45 运行 月报程序

 

第10行明显是错的 ,用户想 每天凌晨3点运行 任务,但是只是在hour 处输入 3p.m, 仅仅是小时,"*"在 minitue ,从3:00 到 3:59,每分钟都会运行一次。

 

第11行 改正错误, 限制时间是凌晨3点,每周一 ——周五

 

现在你基本了解了cron, 试下下面的实验。cron 通常运行一个脚本,当然可以运行任何命令,如果你没有cron权限,你可以和其他有此权限的人一起工作。

 

用crontab 新建一个cron 表, 我让程序每分钟运行一次

 

$crontab -e 

0-59    *    *    *    *    echo `date` "Hello" >>$HOME/junk.txt 

 

 

第六个域 输出当前时间  (注意 date 由 反引号 包含), 后跟 "Hello",同时 此命令将 结构重定向到 当前HOME目录下junk.txt 文件。

关闭 这个cron 表文件, 如果你拥有cron全限, 你将收到系统提示,文件已成功保存

 

 

用 crontab -l 来查看此文件:

 

 

 

$ crontab -l 

# DO NOT EDIT THIS FILE 

# installed Sat Jul 15 

0-59    *    *    *    *    echo `date` "Hello" >>$HOME/junk.txt 

 

改变你的 home目录, 用touch 命令 创建junk.txt 如果 它不存在, 然后进入home目录, 用tail -f 打开文件,显示其中由 cron插入的内容

$ cd 

$ touch junk.txt 

$ tail -f junk.txt 

Sat Jul 15 15:23:07 PDT Hello 

Sat Jul 15 15:24:07 PDT Hello 

Sat Jul 15 15:25:07 PDT Hello 

Sat Jul 15 15:26:07 PDT Hello 

 

屏幕会刷新,当每分钟 信息插入 junk.txt.

按 Ctrl+D 停止显示

 

确保最后你清理掉,刚才插入cron表的那行  。 用  crontab -e 打开cron 表然后删除刚创建的那行

 

由 cron 运行的所有的命令应该安静,不应该有输出。 因为cron 作为一个隔离的任务,没有终端用来输出。

但是,好的计划,女士,男士, 程序员并没有并没有按照希望的步骤来做, 很有可能一个脚本,一个命令或作业 会输出 一些错误信息

 

为了应付异常,cron 捕捉所有到 stdout或 stderror ,他们并没有被定为到文件的输出,被捕捉到的输出被放到一个邮件中,发送给 写命令的人 或者 root ,另一方面,捕捉错误要比 发出异常 好的多 ,比较方便处理。。

阅读更多
上一篇Linux 内存查看及含义
下一篇Linux下程序访问oracle数据的时间格式
想对作者说点什么? 我来说一句

linux cron 工作原理

2009年09月09日 1KB 下载

关于cron机制

参考材料:

tong_xin2010 tong_xin2010

2014-10-15 16:47:56

阅读数:261

没有更多推荐了,返回首页

关闭
关闭