Cron表达式:在cron表达式中,?和*有什么区别?

13

在我看来,它们两个意思都是“任意可用值”。它们之间的区别到底是什么?

4个回答

17

*代表字段中的每个可能值。 ?代表您不关心该字段的值。当您有两个可能会矛盾的字段时,就会使用它。一个常见的例子是月份中的日期和星期几字段。例如,考虑一个cron规范,用于在每个月的第一天上午10点运行:

0 0 10 1 * ? *

现在让我们进行分解:

  • Seconds: 0 - 我们希望它在10:00:00这个时间运行
  • Minutes: 0 - 我们希望它在10:00:00这个时间运行
  • Hours: 10 - 我们希望它在10:00:00这个时间运行
  • Day of month: 1 - 我们希望它在每个月的第一天运行
  • Month: * - 我们希望它在每个月都运行(例如1月1日,2月1日等)
  • Day of week: ? - 我们不关心星期几。Cron应该在每个月的第一天运行,无论是星期天、星期一还是其他星期几。
  • Year: * - 我们希望它每年都运行

所以你的意思是,我们不能在“day-of-month”中指定1,在“day-of-week”中指定*,因为我们无法为两个字段都指定一个特定值(或“所有值”=*)。那么?只是一种消耗“day-of-week”字段的方式,而不与“day-of-month”产生冲突,这样我们就可以在它之后指定“year”的值了? (问这个问题是因为另一个问题说不清楚。) - T.J. Crowder

6

来自Quartz Scheduler

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

?(“没有特定值”)-当您需要在允许使用该字符的两个字段中指定某些内容但不是另一个字段时非常有用。例如,如果我想让我的触发器在月份的特定日期(例如第10天)触发,但不在乎那天是星期几,我会将“10”放入月份字段中,“?”放入星期字段中。请参见下面的示例以了解详细信息。


1
* 字符用于指定所有值。例如,分钟字段中的 "*" 表示 "每分钟"。 ? 字符允许在月份和星期几字段中使用。它用于指定“没有特定值”。当您需要在两个字段中指定某些内容但不需要另一个字段时,这很有用。请参见下面的示例以了解更多信息。
您可以在此处查看更多信息: http://docs.netkernel.org/book/view/book:mod:cron/doc:mod:cron:cronexpression 此外,如果您需要创建Cron表达式,可以使用此工具: http://www.cronmaker.com/

0
  • * 意味着每个时间。根据位置不同,可以是每秒、每分钟、每小时、每天或每月。
  • ? 表示将由其他字段选择。因此,? 不会添加过滤器,但它也不会每次运行。

? 用于设置日期,因为它可能是一个月的某一天或星期中的某一天。因此,如果您选择了某个月的某一天(如该月的第一天),那么您在星期几的那一天中放置 ?,表示它不会每天运行,而只有那些符合其他条件的日子。反之亦然,如果您设置星期几,那么您就在那个月的某一天中放置 ?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接