Node.js setTimeout 24 小时 - 有什么注意事项吗?
Node.js setTimeout for 24 hours - any caveats?
简单的问题,我想在 Node.js
中设置 24 或 12 小时超时以定期(一天一次或两次)检查一些数据库数据并清除可疑垃圾(如果有)。
是否有任何我需要注意的由设置超长超时引起的问题或性能问题?我不介意它是否不是精确的 12-24 小时毫秒,也不介意在服务器崩溃时失去这个超时,因为无论如何我都会 运行 在服务器启动时使用相同的垃圾收集器。
结论:
- 我没有使用本机 OS cron 到 运行 单独的脚本,因为我需要访问此脚本中的当前 Node.js 进程数据。
- 最后我决定用https://www.npmjs.com/package/cron
包,因为它能够在特定时间进行调度(大概是在服务器负载较低的时间)。
- 感谢大家的快速回复!
我已经成功使用包 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 的人也是如此。它还会自动保护您免受长期内存泄漏,因为您的应用程序将在每次迭代后被终止。
简单的问题,我想在 Node.js
中设置 24 或 12 小时超时以定期(一天一次或两次)检查一些数据库数据并清除可疑垃圾(如果有)。
是否有任何我需要注意的由设置超长超时引起的问题或性能问题?我不介意它是否不是精确的 12-24 小时毫秒,也不介意在服务器崩溃时失去这个超时,因为无论如何我都会 运行 在服务器启动时使用相同的垃圾收集器。
结论:
- 我没有使用本机 OS cron 到 运行 单独的脚本,因为我需要访问此脚本中的当前 Node.js 进程数据。
- 最后我决定用https://www.npmjs.com/package/cron 包,因为它能够在特定时间进行调度(大概是在服务器负载较低的时间)。
- 感谢大家的快速回复!
我已经成功使用包 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 的人也是如此。它还会自动保护您免受长期内存泄漏,因为您的应用程序将在每次迭代后被终止。