Hangfire Cron表达式无效

时间:2017-05-24 13:19:06

标签: cron hangfire

我正在使用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使用的一个,但它没有多大帮助。

1 个答案:

答案 0 :(得分: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