Node.js setTimeout 24 小时 - 有什么注意事项吗?

Node.js setTimeout for 24 hours - any caveats?

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

是否有任何我需要注意的由设置超长超时引起的问题或性能问题?我不介意它是否不是精确的 12-24 小时毫秒,也不介意在服务器崩溃时失去这个超时,因为无论如何我都会 运行 在服务器启动时使用相同的垃圾收集器。

结论:

我已经成功使用包 cron。它使用简单,通常与 CronTab 兼容。我有一份每月运行一次的工作,自去年以来一直有效,所以我可以证明这一点。

话虽这么说,这个包最终只是在内部使用 setTimeout 所以你这样做没有真正的问题。如果您的超时数太大(大于最大 JavaScript 整数),则可能存在问题,但 1000 * 60 * 60 * 24 明显小于该值。

显然,如果您的系统出现故障或脚本因其他原因崩溃,超时将不起作用。

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

就我个人而言,我会使用 cron 作业来完成此类事情(在 Unix/Linux 中),或者在 Windows 中使用 "scheduled task"。在任何情况下,工作都将完全在服务器上完成,由服务器完成......因此,真的没有理由让 JavaScript 应用程序(在 "some other" 计算机上)参与其中.

更一般地说:"no, don't tell someone to 'go to sleep for 12 hours,' somehow trusting that this means s/he will wake up in time." 相反,使用闹钟。计算 activity [下一个] 发生的绝对时间,然后确保 activity 确实 发生 "not-sooner." 安排实际需要工作的计算机,使用该计算机上可用的任何调度工具在适当的时间完成工作。

应该没有任何问题,但我认为最好用 OS cron 作业来做这件事。这将使用 OS 计时器,将调用您的节点应用程序;每个人都会清楚这一点,即使是从未见过 node 或 JavaScript 的人也是如此。它还会自动保护您免受长期内存泄漏,因为您的应用程序将在每次迭代后被终止。