我想在Hybris中创建一个可以在月底前运行5天的cron作业。我正在使用
0 23 22-31 * * [$(date -d + 1day +%d)-eq 1]
hybris cron job impex配置中的等效设置。
答案 0 :(得分:2)
hybris使用Quartz 2,如documentation中所示。
来自Quartz 2 documentation:
“月”和“周”字段中允许使用“ L”字符。该字符是“ last”的简写,但在两个字段中每个都有不同的含义。例如,“月”字段中的值“ L”表示“月的最后一天”,即非-年的1月31日,2月28日。[...] 您还可以指定与该月最后一天的偏移量,例如“ L-3”,这表示日历月的倒数第三天。使用“ L”选项时,不要指定列表或值的范围,这一点很重要,因为这样会导致结果混乱/意外。
因此您可以使用该0 0 0 L-5 * ?
。
注意:在较早的hybris版本(v4)上,我不确定Quartz 2是否可用。对于Quartz 1,您不能使用L-x
模式。
如果您想在月底前精确5天,则应创建3个触发器。
0 0 20 26 1,3,5,7,8,10,12 ? * -> the 26th at 20h for all 31 days month
0 0 20 25 4,6,9,11 ? * -> the 25th at 20h for all 30 days month
0 0 20 23 2 ? * -> the 23rd at 20h for february, this is actually a corner case because you may have different day for february...
还有其他解决方案,但是要复杂得多。
您可以在首次运行时设置触发器。然后,在您的作业中,您可以访问LocaleDate对象以确定该作业下次触发。最后,使用Java代码或impex创建+导入来更新cronjob的触发器。
答案 1 :(得分:1)