【问题标题】:Hangfire Cron expressions are not validHangfire Cron 表达式无效
【发布时间】:2017-10-24 20:51:36
【问题描述】:

我正在使用 Hangfire,我想为我的 RecurringJobs 描述不同的场景。但我无法实现我想要的,如果 CRON 已经有限,Hangfire 使用的 CRON 更多。

我继续阅读 Hangfire 文档,我发现喜欢 https://en.wikipedia.org/wiki/Cron#CRON_expression 以获得比 Hangfire 默认支持的更复杂的表达式。但它们甚至不兼容,例如,Hangfire 只有分钟、小时、月、日、星期几,但如果我使用 L 或 ?就像它在文档上所说的那样,它不起作用的那一天。我有这个错误这个表达式的以下错误16 14 L ? ?

InnerException = {"'L' is not a valid [Day] crontab field value. It must be a numeric value between 1 and 31 (all inclusive)."}

来自 Hangfire 的 CRON 具有以下方法:Monthly(int day); 如果我选择实例 31,会发生什么?它仍然会在 2 月或 4 月等月份运行,例如每个月的最后一天?还是我需要做一些额外的事情来实现它?

这样是怎么回事?我似乎无法定义用户选择的日期为 31 日的条件,以便始终在该月的最后一天运行后台作业。而且我什至不谈论第 29 天或第 30 天,这也是特殊原因,我总是使用每月的最后一天来处理后台作业。

我虽然使用 Hangfire.CRON 的 Month 方法,但我认为它不会按照我想要的方式处理 29,30 和 31 天。

您是否确认 Hangfire Cron 不使用文档引用的 Cron 表达式,是否有任何方法可以实现我正在寻找的内容?另外,有什么建议的教程或可以帮助我的东西吗?我一直在阅读https://github.com/atifaziz/NCrontab,我认为它是 Hangfire 使用的,但它并没有太大帮助。

【问题讨论】:

    标签: cron hangfire


    【解决方案1】:

    NCrontab 是对的。 Hangfire 使用它,所以你应该确保这个库支持你的 cron 表达式。两个简单的选择:

    Cron.Monthly(31) 被转换为0 0 31 * * 并且只有当当月有31 天时才会触发作业。

    要始终在每月的最后一天运行后台作业,请添加三个单独的作业:

    0 0 30 4,6,9,11        *
    0 0 31 1,3,5,7,8,10,12 *
    0 0 28 2               *
    

    Cron job to run on the last day of the month

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-27
      • 1970-01-01
      • 1970-01-01
      • 2015-01-08
      • 1970-01-01
      • 2012-11-30
      • 2017-10-10
      • 1970-01-01
      相关资源
      最近更新 更多