crontab是Unix和Linux用于设置周期性被执行的软件包,服务器上很多系统任务都会周期性执行,比如重启某个服务器,定期清理日志等。这就可以使用crontab。将任务注册到cron进程查看的配置文件中,这样cron周期性地查看这些配置文件时,将会执行设置好的定时任务。在实际开发和部署中,大部分程序都不需要定时自维护,只需要写好自己的业务逻辑,通过crond这个工业级程序调度即可。


cron

cron是一个系统Daemon进程,一般挂在init下。笔者的kali2中cron这个进程就是挂在init下。这个进程主要工作是定期检查用户注册的任务信息,并调用相应的任务执行。所以当用户新加入了定时任务后,也不需要重启此进程,cron会自动检测和维护一个作业列表。


crontab

这是一个cron注册信息的工具。cron不提倡直接编辑注册信息文件,使用这个crontab可以比较容易的完成注册工作。注意,这个工具是针对各个用户的,并非针对系统管理员,对于系统管理员,则可以直接编辑/etc/crontab文件进行任务配置,作系统级配置。


简单使用

假设如下命令希望每天每隔一分钟执行一次:

date >> /var/log/date_testing
则我们可以使用crontab来注册这一任务

crontab -e
首次打开可能会需要你选择默认的编辑器,自己选择即可,我选择的vim basic。之后就可以开始写上配置信息:

* * * * * date >> /var/log/date_testing

上例五个星号代表运行时间,分别是 :分 时 日 月 每周的日。星号代表任意值,也就是说,任意年,任意月,任意时,任意分,任意日,都执行后接的命令。关于时间格式,下文讲解。保存文件退出后,使用如下命令将会看到刚才注册的任务:

crontab -l
这样,查看日志文件/var/log/date_testing即可看到每分钟执行的输出。 注意:在一般情况下,若没有设置命令输出重定向(date是有输出的,输出到stdout),则以邮件的形式发送到运行的用户信箱。久而久之这些信息会非常大,可能需要人工处理。所以妥善管理任务程序的输出是比较好的选择


时间格式
上文例子中提到了任务注册的时间格式。以下是具体的时间格式讲解。

字段 值范围
minute 0-59
hour 0-23
day of month 0-31
month 1-12或name
day of week 0-7或name

除了具体值,指定在具体某一时刻(如分字段的6代表每小时第6分钟,月字段的3代表每年的3月),还可以使用通配符和其他描述符号。

*代表取任意值,如在分字段上标示任意分钟都会执行,每一分钟;在月字段上表示每一月都会执行。

-代表取某个范围(短横线,减号)。如在时字段上取值1-18表示每天1时到18时,这期间每个小时。分字段上的5-10表示每小时的第五分钟到第十分钟,这期间每分钟。

,代表具体值枚举(逗号)。比如分字段上的2,3,4,8表示每小时中第二、第三、第四、第八分时刻。

/n代表每隔 n 单位间隔,n 代表间隔多长,例如每五分钟进行一次,则可在分字段标示0-59/5,在0-59时间段里每五分钟里。这个符号一般与上面三个符号连用。

注意:周与日月不能同时设定,这样可能cron无法准确获取时间。周字段中0代表周天。

上面可能说的模棱两可,下面有些例子,可以帮助理解:

43 21 * * *              21:43 执行
15 05 * * * 05:15 执行
0 17 * * * 17:00 执行
0 17 * * 1 每周一的 17:00 执行
0,10 17 * * 0,2,3 每周日,周二,周三的 17:00和 17:10 执行
0-10 17 1 * * 毎月1日从 17:00到7:10 毎隔1分钟 执行
0 0 1,15 * * 毎月1日和 15日和 一日的 0:00 执行
42 4 1 * * 毎月1日的 4:42分 执行
0 21 * * 1-6 周一到周六 21:00 执行
0,10,20,30,40,50 * * * * 每隔10分 执行
*/10 * * * * 每隔10分 执行
* 1 * * * 从1:0到1:59 每分钟 执行
0 1 * * * 1:00 执行
0 */1 * * * 毎时0分 每隔1小时 执行
0 * * * * 毎时0分 每隔1小时 执行
2 8-20/3 * * * 8:02,11:02,14:02,17:02,20:02 执行
30 5 1,15 * * 1日 和 15日的 5:30 执行
例子是网上找的,但也都可以用,笔者已经检查过。


其他

这里主要说一些自己查到和翻阅manpage看到的内容
1) Debian中的cron增加了一个系统级任务特性,这个特性一般便于系统管理,在/etc/目录下有基于时(cron.hourly)、日(cron.daily)、月(cron.monthly)、周(cron.weekly)的任务注册文件,系统级任务都将记录注册在这些文件中。并且作业通过run-parts调用。


2)当使用crontab注册任务时,是为用户注册,非管理员,当然管理员也可以通过这个工具注册。注册的作业并不是存放在/etc/crontab文件,而是按照用户不同,在目录/var/sqool/cron下创建以用户名命名的目录,并将注册信息填写在此目录的文件中。


3)/etc/crontab文件一般给管理员用户查看。


4)在Debian下cron的日志写在syslog中,可以在/var/log/syslog中查看。


写在后面

本文中有很多信息来自互联网,例子都经过测试,在kali2系统(基于Debian)上无误。若有不足或错误,欢迎各位指正。


更多相关文章

  1. 是否遇到过MySQL workbench text字段不能直接放入json格式内容
  2. 求sql【复制同一表记录,但有两个字段需要修改--详情 Btn_oncliek
  3. 查询表中的某一行,表中没有行号相关的属性字段,SQL语句怎么写啊?50
  4. SQL根据某个字段分组查询:
  5. mysql中如何对text字段值进行追加更新
  6. 怎么用SQL语句实现表中的一个字段加1啊??
  7. MySQL实现表之间的字段更新
  8. sql2005指定字段插入空格。
  9. Oracle系统表v$session、v$sql字段说明(转)

随机推荐

  1. android 布局边框
  2. Good Site
  3. 升级到Android Studio 3.0出现 aapt2错误
  4. ProgressBar属性小结(转载)
  5. android 布局简括
  6. Android 异步加载图片
  7. Android中attr自定义属性详解
  8. android 注册、登录实现程序
  9. Failed to fetch URL https://dl-ssl.goo
  10. 2、Android应用程序基本特性