Hangfire Cron 表达式无效

Hangfire Cron expressions are not valid

我正在使用 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 会怎样?它仍然会 运行 在像二月或四月这样的月份,例如在每个月的最后一天?或者我需要做一些额外的事情来实现它吗?

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

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

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

关于 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