设置 Cron 作业在每月第 Y 天触发,处理不存在的日期

问题描述 投票:0回答:1

我需要帮助配置定期 cron 作业以在每月的第 Y 天触发事件。虽然我可以使用简单的表达式,例如 0 0 10 * ? * 要在每个月的 10 号触发事件,需要像 31 号、30 号和 29 号这样的日期进行挑战。

如果我使用 0 0 31 * ? *,4月、6月、9月、11月等不存在31日的月份不会触发事件。同样,使用 0 0 30 * ? * 不适用于二月,并且 0 0 29 * ? * 在非闰年不起作用。

我需要的是一个解决方案,如果特定月份中不存在指定的日期,则事件会在该月的最后一天触发。例如,如果我将 cron 作业设置为在 31 日触发,而 4 月没有 31 日,我希望该事件在 4 月 30 日触发。

虽然我知道在 cron 表达式中使用“L”可以在 31 日这样的日子里工作,但对于 29 日和 30 日来说就不够了。

如何修改我的 cron 表达式或实施解决方案来实现此功能?

当前 Cron 表达式:0 0 10 * ? *(每月10号触发事件)

期望的行为:如果指定的日期不存在,则在该月的最后一天触发事件。

我感谢您提供的任何见解或解决方案。谢谢!

cron scheduler scheduling cron-task
1个回答
0
投票

我有一个解决这个问题的方法。我不确定这是否是最佳方式,但它满足所有条件。

如果日期是1-28(例如10号)

  • cron(0 0 10 * ? *)

如果日期是 31

  • cron(0 0 L * ? *)

如果日期是 29 或 30,创建两个 cron:

  • cron(0 0 29 1,3-12 ? *)
  • cron(0 0 L 2 ? *)
© www.soinside.com 2019 - 2024. All rights reserved.