手记

定时任务cron

cron是一个Unix-like的定时软无工具。

Overview

Cron 是由一个crontab文件驱动的。通常位于/etc目录或其子目录内。crontab file的每一行都是一个任务,大概像这样:

# ┌───────────── minute (0 - 59)
# │ ┌───────────── hour (0 - 23)
# │ │ ┌───────────── day of month (1 - 31)
# │ │ │ ┌───────────── month (1 - 12)
# │ │ │ │ ┌───────────── day of week (0 - 6) (Sunday to Saturday;
# │ │ │ │ │                                       7 is also Sunday on some systems)
# │ │ │ │ │
# │ │ │ │ │
# * * * * *  command to execute

两个例子:

  1. 每天00.01清除日志文件:

    1 0 * printf "" > /var/log/apache/error_log

  2. 每个周六23.45执行一个sh文件

    45 23 6 /home/oracle/scripts/export_dump.sh

权限

有两个相关文件:

  • /etc/cron.allow
  • /etc/cron.deny
    这两个文件里面存的是用户名。比如:
    root nick dee sarah
cron 表达式
表格如下
属性
必须 值域
分钟 Y 0-59
小时 Y 0-23
日期 Y 1-31
月份 Y 1-12
星期 Y 0-6
年份 N 1970-2099

注意:在星期属性中,0代表周日,6代表周六

标准特殊字符

逗号,

用于分割同一个属性的不同时间,比如每周一和周三:1,3

短横线-

表示一个时间范围,比如周一到周三:1-3

百分号%

代表换行符,除非用反斜线\转义。并且第一个%后面的所有数据都将作为标准输入发送到命令中。

非标准字符(仅在某些cron实现支持)

L

代表Last。比如一个月的最后一个星期五:5L

W

用于日期属性,表示距离给定日期最近的工作日,比如15W表示:距离这个月15号最近的工作日。

Hash

m#n表示第n个星期m。比如:5#3表示这个月的第三个星期五。

问号?

表示占位符。比如? ? * * * *,如果在8:25启动的话,就会被解析成25 8 * * * *

斜杠/

可以用于表示时间间隔。比如*/5表示每5分钟。
需要注意的是必须得能够被整除。比如表示分钟间隔就必须得被60整除,想表示小时间隔就必须得被24整除。

相关

Quartz是一个Java定时任务框架。下篇再做分享。

参考资料

wikipedia-cron

0人推荐
随时随地看视频
慕课网APP