Skip to main content
 首页 » 编程设计

Cron 表达式教程

2022年07月19日142JeffreyZhao

Cron 表达式教程

cron是类unix系统的一款实用工具。可以利用其实现周期性在特定日期/时间运行任务,是自动化运行重型任务的好工具,否则需要人工干预。ron作为精灵线程运行————意味着仅需要开始一次,然后在后台运行。进程利用crontab读取计划项并启动任务。随着时间推移,cron表达式被广泛采用,所以经常会在很多其他程序或库中使用。

使用Crontab

cron计划是简单文本文件,linux系统位于/var/spool/cron/crontabs。该文件不能直接编辑,需要使用crontab命令进行访问。
举例,打开crontab文件,需要触发下面命令:

crontab -e 

crontab中的每行定义一项表达式和运行任务:

* * * * * * /usr/local/ispconfig/server/server.sh 

该项会每秒运行一次脚本。

Cron表达式

下面看看cron表达式的语法,有六个字段组成:

<second> <minute> <hour> <day-of-month> <month> <day-of-week> <year> <command> 

其中 字段是可选的。

表达式中的特殊字符

  • (all) – 用于指定在每个时间单元运行特定事件。举例 “*” 在 自动 – 意味着每分钟。

  • ? (any) – 用在 和 <day-of -week> 字段,表示任意值 –
    忽略该字段值。举例,如果我们想在每月5号运行特定脚本,并不关心星期几,可以使用 “?” 在 字段上。

  • – (range) – 用于决定值得范围。举例, “10-11” 在 字段表示 “10th and 11th hours”

  • , (values) – 用于指定多个值。举例, “MON, WED, FRI” 在 字段表示
    “Monday, Wednesday, and Friday” 三天

  • / (increments) – 用于指定增加至。举例, “5/15” 在 字段上, 表示 “小时上的5, 20, 35
    和 50 分钟”,即每次增加15分钟之后运行

  • L (last) – 用在不同字段上意思有差异。举例, 用在 字段, 表示月的最后一天,
    如1月31日和日历的每个月份。也可以和偏移量一起使用,如 “L-3“, 表示月的最后三天。在字段上,
    特指周的最后一天。也可以和字段的值一起使用, 如“6L“, 表示最后一个星期五。

  • W (weekday) – 它用于指定一个月中最接近给定日期的工作日(周一到周五)。举例,如果指定 “10W” 在
    字段上, 表示最接近月度第十个工作日。所以如果第十日是星期六,那么则在第九个工作日触发任务,
    如果第十个工作日是星期天, 则会在第十一个工作日触发。如果在
    字段上指定“1W”,且第一日是星期六,则会在第三日即星期一触发任务,不能跳到上一个月。

  • ‘#’ – 用于指定月的第几个周天, 举例,月的第三个星期五可表示为 “6#3“ 。

示例及测试

下面看几个示例:

2017年每天12点执行:

0 0 12 * * ? 2017 
 

每天从下午1点开始,1点55分结束,下午6点开始,6点55分结束。

0 0/5 13,18 * * ? 
 

下午1至1点零5分的每分钟:

0 0-5 13 * * ? 
 

每个月的星期二上午1:15 pm 和 1:45:

0 15,45 13 ? 6 Tue

读者可以通过一些在线工具进行测试,如:cronexpressiondescriptor

总结

本文描述了cron 任务及crontab,并详细解释了不同符号的使用。


本文参考链接:https://blog.csdn.net/neweastsun/article/details/96566301