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

时间:2015-05-07 14:54:06

标签: javascript node.js settimeout

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

是否存在由设置巨大超时引起的任何可能的问题或性能问题,我需要注意?我不介意,如果它在12到24小时内不准确,并且不介意在服务器崩溃时丢失此超时,因为我将在服务器启动时运行相同的垃圾收集器。

结论:

  • 我没有使用本机OS cron来运行单独的脚本,因为我需要访问此脚本中的当前Node.js流程数据。
  • 最后我决定使用https://www.npmjs.com/package/cron 因其在特定时间(可能是在服务器负载较低时)进行转换的能力而打包。
  • 感谢大家快速回复!

3 个答案:

答案 0 :(得分:8)

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

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

显然,如果您的系统出现故障或脚本因其他原因而崩溃,则超时无法正常工作。

如果可用(或Windows任务安排),您也可以直接使用crontab

答案 1 :(得分:4)

就个人而言,我会使用SELECT: no such column 'column2'工作来完成这类工作(在Unix / Linux中)或者#34;计划任务"在Windows中。在任何情况下,工作都将完全在服务器上,由服务器完成......因此,我们没有理由拥有一个JavaScript应用程序(在#34;其他一些"计算机上)参与其中。

更一般地说:"不,不要告诉别人去睡12个小时,'不知怎的,相信这意味着他/她会及时醒来。" 而是使用闹钟。计算活动应该[下一次]发生的绝对时间,然后确保活动 发生"不是更早。"安排实际需要工作的计算机,使用该计算机上可用的任何计划设施在适当的时间完成工作。

答案 2 :(得分:1)

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