crontab的原理及使用

转载 2011年01月19日 11:10:00

#!/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内核内存管理之kmalloc

在SLAB的高速缓存中有普通高速缓存和专用高速缓存,平时用kmem_cache_create创建的是专用高速缓存,比如存放task_struct,mm_struct的高速缓存。普通高速缓存主要供kma...

2.4 内存管理结构mem_map初始化

2.4 内存管理结构mem_map初始化 对主内存区起始位置的重新确定,标志着主内存区和缓冲区的位置和大小已经全都确定了,于是系统开始调用mem_init()函数。先对主内存区的管理结构进行设置...

crontab的详细使用

  • 2013年03月04日 16:06
  • 6KB
  • 下载

详解Linux中cron/crontab工作原理

先介绍几个基本概念:       后台进程:在后台运行的无须与用户交互的程序。在多任务操作系统上运行多个后台进程,有些后台进程(例如守护程序)从来都不需要用户输入,其它一些进程只是在用户忙于目...
  • wzyzzu
  • wzyzzu
  • 2014年12月26日 09:50
  • 866

docker下计划任务crontab的使用方法

转自原地址 今天聊下在docker怎么合理的使用crontab 。  一直没有注意在docker如何使用crontab计划任务,我曾经已经不能用,所以用的是dockerfile...

使用Crontab定时执行Spark任务

今天的主要内容有: Linux下使用定时器crontab Linux下如何编写Perl脚本 在Java程序中调用Linux命令 实例:每天0点30分执行Spark任务 1....
  • Trigl
  • Trigl
  • 2017年03月15日 16:54
  • 2357

Ubuntu 下计划任务使用(crontab)

1. crontab 语法格式: f1    f2    f3    f4    f5    program 其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f...

轻松使用crontab调度作业

很容易用crontab命令创建一个任务,定期运shell脚本,如:# 修改文件属性为可执行 chmod 755 /root/regular_etl.sh # 编辑crontab文件内容 crontab...
  • wzy0623
  • wzy0623
  • 2016年12月28日 09:28
  • 612

yii crontab 命令使用 经测试

yii crontab 命令使用 经测试

linux计划任务---crontab的使用

网址:http://blog.csdn.net/zlzlei/article/details/7767599 1:cron服务相关     a:查看crond服务的启动情况         ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:crontab的原理及使用
举报原因:
原因补充:

(最多只允许输入30个字)