如何解决我已经在节点js中的确切时间安排了一个每月一次的Cron作业,如果由于某种原因服务器在那个时间内会失败怎么办?
在服务器重新运行后,是否有办法确保在任何情况下都可以使用crone?
const cronServiceStatistic = new CronJob(' 0 0 1 * * ',(async () => {
console.log('cron is working')
})
解决方法
您可以创建在服务器启动时运行的cronjob。代替格式“ 0 0 1 * *”,您可以在每次服务器启动时使用“ @reboot”来运行命令。
,您正确地担心由于网络或硬件故障而导致计划的cron作业在指定时间无法运行的可能性。
使cron作业能够抵抗这种失败涉及以下几件事:
- 必须尽可能频繁地调用cron作业代码(对于您的情况,每月调用一次以上)而不会损坏系统。这可以通过将上次成功运行的时间戳保存在某种持久性存储中来完成。然后,如果您尝试过于频繁地运行,则可以简单地返回另一次运行。
- 您必须在系统启动时(例如,在重新启动或软件重新启动之后)调用cron作业代码。这样,即使系统处于脱机状态,您也不会失败。上面的第1项将确保启动运行不会损坏您的系统。
- 您应该让它编写日志条目,以描述其每次运行时的运行情况。您将想知道有时会发生什么。
- 您应避免将本地时间02:00到03:00之间的小时作为指定的运行时间。在大多数时区中,从标准时间转换为夏令时的那一天都不存在该小时。它在转换回标准时间的那天存在两次。
- 编辑,如果可以,请避免使用确切的午夜时间或确切的时间作为工作时间。为什么?许多人在配置此类内容时都不会避开午夜。这意味着繁忙的应用程序可以同时发生很多事情。例如,如果您指定的时间是每小时的十二分钟,则您的工作与其他时间完全相同的机会较小。死锁和减速的机会更少。 (此外,如果各种服务器时钟彼此之间不同步,则某些服务器上的工作可能恰好像昨天一样,恰好在午夜开始工作。您不想向CFO解释为什么月底处理失败是由于网络时间协议有问题。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。