【问题标题】:Cron Expression: What exactly is the difference between ? and * in a cron expression?Cron 表达式: 之间到底有什么区别?和 * 在 cron 表达式中?
【发布时间】:2016-03-17 01:24:30
【问题描述】:

在我看来,两者都意味着“任何可用值”。它们之间到底有什么区别?

【问题讨论】:

    标签: cron quartz-scheduler crontab cronexpression


    【解决方案1】:

    * 表示字段中所有可能的值。 ? 表示您不关心价值。当您有两个可能相互矛盾的字段时使用它。常见的示例是月中日和周中日字段。例如,在每个月的第一天上午 10 点运行的 cron 规范:

    0 0 10 1 * ? *
    

    现在让我们分解一下:

    • 秒:0 - 我们希望它在 10:00 运行:00
    • 分钟:0 - 我们希望它在 10:00:00
    • 运行
    • 小时:10 - 我们希望它在 10:00:00
    • 运行
    • 一个月中的某天:1 - 我们希望它在每个月的 1 号运行
    • 月份:* - 我们希望它每月运行一次(例如,1 月 1 日、2 月 1 日等)
    • 星期几:? - 我们不关心星期几。 cron 应该在每个月的 1 号运行,无论是星期日、星期一等。
    • 年份:* - 我们希望它每年都运行

    【讨论】:

    • 所以你是说,我们不能在“day-of-month”中指定1,在“day-of-week”中指定*,因为我们无法指定特定的两个字段的值(或“所有值”=*)。所以? 只是一种使用“星期几”字段而不与“星期几”冲突的方式,所以我们可以在它之后为“年份”指定一个值? (问是因为another question said it wasn't clear。)
    【解决方案2】:

    来自Quartz Scheduler

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

    ? ("no specific value") - 当你需要在 允许字符的两个字段之一,但不是 其他。例如,如果我希望触发器在特定日期触发 本月(例如,10 日),但不在乎一周中的哪一天 碰巧是,我会在日期字段中输入“10”,而“?”在 星期几字段。请参阅下面的示例进行说明。

    【讨论】:

      【解决方案3】:

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

      ? 字符允许用于日期和星期几字段。它用于指定“无特定值”。当您需要在两个字段之一中指定某些内容而不是另一个字段时,这很有用。请参阅下面的示例进行说明。

      您可以在这里查看更多信息: http://docs.netkernel.org/book/view/book:mod:cron/doc:mod:cron:cronexpression

      如果你需要创建一个 Cron 表达式,你可以使用这个:http://www.cronmaker.com/

      【讨论】:

        猜你喜欢
        • 2017-10-10
        • 1970-01-01
        • 1970-01-01
        • 2016-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-30
        • 2019-02-10
        相关资源
        最近更新 更多