Node.js setTimeout 24小时 – 任何警告?

简单的问题,我想在Node.js设置24或12小时的超时周期性(一天一次或两次)检查一些数据库数据,并清理可疑的垃圾,如果有的话。

是否有任何可能的问题或性能问题,由设置巨大的超时造成的,我需要知道的? 我不介意,如果它不是确切的12-24小时在毫秒,并不介意丢失服务器崩溃的这个超时,因为我将在服务器启动时运行相同的垃圾收集器。

结论:

  • 我不使用本机操作系统cron来运行单独的脚本,因为我需要访问此脚本中的当前Node.js处理数据。
  • 最后,我决定使用https://www.npmjs.com/package/cron软件包,以便在特定的时间(大概是在低服务器负载的时候)安装。
  • 感谢大家的快速反应!

我已经成功使用软件包cron 。 它使用简单,通常与CronTab兼容。 我有一份工作每月运行一次,而且从去年开始一直运行,所以我可以certificate这一点。

这就是说,这个软件包最终只是在内部使用setTimeout所以你没有这个问题。 如果您的超时数量太大(大于JavaScript的最大整数),则可能有问题,但是1000 * 60 * 60 * 24远远小于此值。

很显然,如果你的系统崩溃或者脚本因为其他原因而崩溃,超时将不起作用。

如果可用(或Windows任务调度),也可以直接使用crontab

就个人而言,我将使用cron作业来做这种事情(在Unix / Linux中)或Windows中的“计划任务”。 无论如何,这项工作将完全在服务器上完成,而服务器……因此,真的没有理由让JavaScript应用程序(在“其他”计算机上)参与其中。

更一般地说: “不,不要告诉某人'睡12个小时',不知怎的相信这意味着他/她会及时醒来。 相反,使用闹钟。 计算活动应该发生的绝对时间,然后看到活动确实发生在“不早”。 安排实际需要工作的计算机,在适当的时间使用计算机上可用的任何调度工具来完成工作。

根本不应该有任何问题,但在我看来,这是与OS的cron工作做这件事情更好。 这将使用OS定时器,将调用您的节点应用程序; 这对每个人都是清楚的,甚至对于从未见过节点或JavaScript的人也是如此。 此外,它会自动保护您免受长期内存泄漏,因为您的应用程序将在每次迭代后被杀死。