当前位置: 首页 > 面试题库 >

之间有区别吗?和*在cron表达式中?奇怪的例子

吴飞语
2023-03-14
问题内容

我的系统中有以下cron表达式:

0 0 0/1 1/1 * ? *

你知道吗?我不知道这是什么意思。写这本书的家伙在接下来的两周里放假,所以我得自己弄清楚。该文档可以在这里找到

根据文档,我们有:

* * * * * * *
| | | | | | | 
| | | | | | +-- Year              (range: 1970-2099)
| | | | | +---- Day of the Week   (range: 1-7 or SUN-SAT)
| | | | +------ Month of the Year (range: 0-11 or JAN-DEC)
| | | +-------- Day of the Month  (range: 1-31)
| | +---------- Hour              (range: 0-23)
| +------------ Minute            (range: 0-59)
+-------------- Second            (range: 0-59)

好的,让我告诉您我的想法:我相信该表达式的意思是:

start when:
    seconds:        0
    minutes:        0
    hours:          0
    dayOfMonth      1
    monthOfYear     any
    dayOfWeek       any
    year            any

run every:
    1               hour
    1               dayOfWeek
when:
    dayOfWeek same as on first execution

但是,可用的cron表达式监视器表示,它仅表示每小时。作为编写高级Java开发人员的人,他必须知道编写此表达式的任何理由,而不是:

0 0 * * * * *

我们使用org.springframework.scheduling.quartz.QuartzJobBean

简短的摘要

好吧,我认为我的问题是:0 0 0/1 1/1 * ? *和之间有什么区别0 0 * * * * *

编辑:

该文档可在此处找到。


问题答案:

0/1表示从小时开始,0每个1小时重复一次,
1/1是从该月的第一天开始并1每天执行

因此,此模式 每小时执行一次cron,从一个月的第一天开始,然后每天重复一次。

有使用需求?的一个dayOfWeekdayOfMonth
用于指定既是一天的周和日的日值的支持是不完整的(你当前必须使用“ ?在这些领域的一个”字符)。– xenteros 7分钟前

然后,0 0 * * * ? *(而不是0 0 * * * *?如您所说,必须是强制性的)将是相同的表达式,忽略秒和分钟,并采用其他元素的每个值,将每小时执行一次。

根据您的信息:

0 0 0/1 1/1 * ? *
| |  |   |  | | | 
| |  |   |  | | +-- Year              (range: 1970-2099)
| |  |   |  | +---- Day of the Week   (range: 1-7 or SUN-SAT)
| |  |   |  +------ Month of the Year (range: 0-11 or JAN-DEC)
| |  |   +--------- Day of the Month  (range: 1-31)
| |  +------------- Hour              (range: 0-23)
| +---------------- Minute            (range: 0-59)
+------------------ Second            (range: 0-59)

以及以下特殊字符的解释:

* (“所有值”)

用于选择字段中的所有值。例如,分钟字段中的“”表示*“每分钟”。

? (“无特定值”)

当您需要在允许使用字符的两个字段之一中指定某些内容而在另一个不允许使用的字段中指定内容时很有用。例如,如果我希望触发器在每月的某个特定日期(例如,第10天)触发,但不在乎一周中的哪一天发生,则将“
10”设置为月字段,以及“?” 在星期几字段中。

/

用于指定增量。例如,秒字段中的“ 0/15”表示“秒0、15、30和45”。秒字段中的“
5/15”表示“秒5、20、35和50”。您还可以在“”字符后指定“ /”-在这种情况下,“”等效于在“ /”之前具有“ 0”。月日字段中的“
1/3”表示“从月的第一天开始每三天触发一次”。

为了解释之间的差异?,并*在表达式,首先来看看这个表:

Field Name      Mandatory   Allowed Values      Allowed Special Characters
Seconds         YES         0-59                , - * /
Minutes         YES         0-59                , - * /
Hours           YES         0-23                , - * /
Day of month    YES         1-31                , - * ? / L W   //allowed '?'
Month           YES         1-12 or JAN-DEC     , - * /
Day of week     YES         1-7 or SUN-SAT      , - * ? / L #   //allowed '?'
Year            NO          empty, 1970-2099    , - * /

如您所见,这两个字段?仅在其中一个字段中是允许的,Day of month并且Day of week是必填字段,它将告诉Quartz该值尚未定义,因此,请使用另一个字段(如果?输入Day of month,则使用的值为Day of week)。



 类似资料:
  • 我不明白这个问题的答案:“< code>cron和< code>crontab之间有什么区别。”它们都是调度程序,一个执行文件一次,另一个定期执行文件,还是< code>cron调度一个作业,然后< code>crontab将它们存储在表或文件中以供执行? 提及的维基页面: Cron由crontab(Cron表)文件驱动,crontab文件是一个配置文件,它指定了在给定的计划中定期运行的shell

  • 问题内容: 和PHP 之间有区别吗? 问题答案: 的运算符比较值,而操作者以及比较型。 这意味着:

  • 问题内容: 我是Java的初学者,我想知道Java表达式和语句之间的区别吗? 问题答案: 这是一个例子: 是一个表达而是一个陈述。语句由表达式组成。 这不是特定于Java语言的。许多语言都使用这种语法,例如etc(not )。

  • 问题内容: 在Python中,表达式和语句之间有什么区别? 问题答案: 表达式仅包含标识符,文字和运算符,其中的运算符包括算术运算符和布尔运算符,函数调用运算符 包括预订运算符 等,并且可以简化为某种“值”,可以是任何Python对象。例子: 声明(请参阅 1,另一方面,2)是构成一行(或几行)Python代码的所有内容。注意表达式也是语句。例子:

  • 问题内容: 我的Google-fu使我失败了。 在Python中,以下两个相等测试是否等效? 这是否适用于您要比较实例(list说)的对象? 好的,这样可以回答我的问题: 因此,==测试重视在哪里is进行测试以查看它们是否是同一对象? 问题答案: 如果两个变量指向同一个对象(如果变量引用的对象相等),则将返回。 在您的情况下,第二个测试仅能工作,因为Python会缓存小的整数对象,这是实现细节。对

  • 问题内容: Swift提供了关键字(和)检查对象是否可以成功向下转换: 而且还提供了原文: 对于符合的类,这真的有很大不同吗? 问题答案: 是的, 这是有区别的:在Swift中可以与任何类一起使用,而只能与属于或实现的那些类一起使用。