我需要帮助配置定期 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号触发事件)
期望的行为:如果指定的日期不存在,则在该月的最后一天触发事件。
我感谢您提供的任何见解或解决方案。谢谢!
我有一个解决这个问题的方法。我不确定这是否是最佳方式,但它满足所有条件。
如果日期是1-28(例如10号)
如果日期是 31
如果日期是 29 或 30,创建两个 cron: