Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js setTimeout 24小时-有任何警告吗?_Javascript_Node.js_Settimeout - Fatal编程技术网

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

Javascript Node.js setTimeout 24小时-有任何警告吗?,javascript,node.js,settimeout,Javascript,Node.js,Settimeout,简单的问题是,我想在Node.js中设置24小时或12小时的超时时间,以便定期(每天一次或两次)检查一些数据库数据并清除可疑垃圾(如果有) 是否有任何可能的问题或性能问题,由设置巨大的超时引起,我需要知道?我不介意它是否不是精确的12-24小时(毫秒),也不介意在服务器崩溃时释放这个超时,因为我将在服务器启动时运行相同的垃圾收集器 结论: 我没有使用本机OS cron运行单独的脚本,因为我需要访问此脚本中的当前Node.js进程数据 最后我决定用 在特定时间(可能在服务器负载较低时)调度的能力

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

是否有任何可能的问题或性能问题,由设置巨大的超时引起,我需要知道?我不介意它是否不是精确的12-24小时(毫秒),也不介意在服务器崩溃时释放这个超时,因为我将在服务器启动时运行相同的垃圾收集器

结论:

  • 我没有使用本机OS cron运行单独的脚本,因为我需要访问此脚本中的当前Node.js进程数据
  • 最后我决定用 在特定时间(可能在服务器负载较低时)调度的能力
  • 谢谢大家的快速回复
我成功地使用了该软件包。它使用简单,并且通常与CronTab兼容。我有一份每月运行一次的工作,自去年以来一直有效,所以我可以证明这一点

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

显然,如果您的系统宕机或脚本因其他原因崩溃,超时将无法工作


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

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


更一般地说:“不,不要告诉某人‘睡12小时’,以某种方式相信这意味着他/她会及时醒来。”相反,使用闹钟。计算活动[下一步]发生的绝对时间,然后确保活动“不早”发生。安排实际需要的计算机在适当的时间进行工作,使用该计算机上可用的任何调度工具。

应该没有任何问题,但在我看来,使用OS cron作业来完成这项工作更好。这将使用操作系统计时器,将调用您的节点应用程序;这对每个人来说都很清楚,即使是从未见过node或JavaScript运行的人。此外,它还会自动保护您免受长期内存泄漏的影响,因为您的应用程序在每次迭代后都会被杀死。

为了澄清:
cron
是处理
crontab
文件的Unix/Linux守护进程。这个守护进程(“服务”)一直在系统上运行,监视
crontab
文件,他是在适当的时间实际启动活动的人。其他操作系统做的不同。。。但每个操作系统都会这样做。不知怎的。@MikeRobinson是的,谢谢你的澄清。在Unix上,只需运行
crontab-e
进行设置,然后指向脚本即可。您甚至可以使用节点解释器来运行JavaScript脚本!问题是,我需要从这个脚本中访问当前node.js应用程序的内部数据,所以我认为操作系统运行单独的脚本并不适合这里。顺便说一下,是的,我用的是Unix
Cron
模块看起来很有趣,还在读它,如果它最终只是在应用程序中运行setTimeout,上面有方便的功能,那么我将继续使用普通的setTimeout。另一方面,我可以在特定的时间设置它,可能是为了在服务器负载最小的情况下完成任务。如Mike所说,如果cron包使用本机Unix服务,那就太棒了。我想我会坚持使用这个选项,感谢您的响应,祝您度过愉快的一天=),但是如果
setTimeout
没有任何问题,这意味着您可以在一些可怕的嵌套内部作用域中创建超时,并且仍然可以访问变量等。使用外部进程启动它可能会很复杂,这意味着它将在服务器代码中完成并按时间安排,不涉及第三方。对不起,Max,但我真的不明白你的意思。JavaScript代码是否在“有问题的服务器”上执行?我通常不这么认为。@MikeRobinson噢,对不起,迈克,我没有看到你的评论。是的,如果还不清楚的话,JavaScript是在服务器上执行的(第一个问题中的一个),这意味着在服务器的代码中。它是一个
Node.js
服务器,
Node.js
基本上是在JavaScript上运行的。不寻常,但还行。然而,我认为服务器是“有响应的”。有东西推动它,然后它移动。如果有一个纯粹的维护任务需要在“每晚凌晨1点”执行,那么我就不会使用
Node.js
来完成。我会使用
cron
或其等效工具。你的意思是创建一个单独的应用程序来完成这项工作吗?我的node.js应用程序是一个服务器,它一直在调整HTTP和TCP的大小,事实上,为了判断什么是垃圾,我需要访问这个应用程序的内部数据,比如套接字的收集。例如,可以导出并尝试在db中运行这些数据的同步,但是对于这样一个简单的任务来说,感觉太麻烦了。我不认为“javascript”在其他任何地方运行,而是“在浏览器中[在很远很远很远的计算机上…]”。因此,即使这两个活动在同一台计算机上运行,我“坦率地怀疑”这是否真的是最好的方式。我当然可能错了,所以我不是说你错了。