cron语法简介

Posted imgss

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cron语法简介相关的知识,希望对你有一定的参考价值。

前言

简单的字符串,经过排列组合,总能产生神奇的作用。比如大家耳熟能详的正则表达式,再比如今天要介绍的cron。他们的共同点是简单,但是掌握不好就容易闹笑话。就拿我来说,我想写一个任务,每4个小时执行一次,于是我写下了如下的cron表达式:

* */4 * * *

于是变成了每4小时的每分钟执行一次,也就是每4小时执行60次,如果这个任务比较吃性能,获取还能收获卡死服务器的效果。言归正传,今天来介绍一下cron的语法。在介绍语法之前,先推荐一个网站,https://crontab.guru/, 可以把表达式转换成人类的语言,对于不太熟悉cron的同学来说可以先用这个校验一下,避免犯我这样的错误。

整体

首先要说明的是,根据cron的实现不同,语法上也是有区别的,比如有的实现了秒,有的,-可以一起用。以下的结构来自维基百科:

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

由上面可知,一个cron表达式由5个部分组成:分,时,一个月的第几天,月,一周的第几天。这里解释一下前面两个天的区别,前面的表示第几号,后面的表示周几。那么每一部分可以取哪些值呢?

  • 分 0-59 *
  • 时 0-23 *
  • 日 1-31 *
  • 月 1-12 *
  • 周 0-6 *

但是光靠上面的值,还是不够,举个例子,如果我们想写个每分钟都执行的任务,那么可以这么写:

* * * * * 

但是如果要隔5分钟执行一次,就需要新的语法了

隔几分 ---- /

一个/简单的表达了隔的意思,借助这个符号,我们就可以描述上面的问题了:

*/5 * * * *

但是如果我只是想在20-30分这段时间执行任务呢,那就有请-

从...到... ---- ‘-’

20-30 * * * * 每小时的20-30分执行

30 * * * * 仅在每小时30分执行一次

20-30/2 * * * * 20-30分钟这段时间,每两分钟执行一次

某些 --- ‘,’

正如-经常表示连续的,,经常被用来表示离散的,比如在2,3,5,7,11分钟做某项任务,可以这么写:

2,3,5,7,11 * * * *

,-/也可以一起使用:

2,5-13/4 4 * * * 在第2分钟,第5-13分钟执行一次
2-30/7,5-13/4 * * * * 在第2-30分每隔7分钟, 5-13每分钟执行一次

有了-,/,,这3个符号,我们就可以灵活描述任何复杂的任务了。

缩写语法

月份,周也可以使用缩写语法;

5 0 * JAN-JUL MON-THU  At 00:05 on every day-of-week from Monday through Thursday in every month from January through July

本文完

以上是关于cron语法简介的主要内容,如果未能解决你的问题,请参考以下文章

Go开源宝藏 go-cron 定时任务

jsp语法简介

pg_cron的一点优化

pg_cron的一点优化

在下面的代码片段中的剩余 ='passthrough' 处的代码中出现语法错误

Emmet语法总结