2016-07-26 84 views
1

我很快就写了一个Node.Js脚本,没有进行任何错误处理,并且在遇到错误时偶尔会崩溃。粗心但高效。NodeJs:保持脚本运行一段时间?

为了保持运行,我可以永远使用npm并让它永远重启。花式。

现在让我们说我想让它运行12小时(有些模块/代码在崩溃后重新启动它),然后完全停止。

实现这种行为的任何简单方法?

+1

“不小心,但高效”。这就是问题。我认为它很快但没用。 – undefined

+0

;-) @Vohuman:我不同意。该脚本是仅供个人使用的业余机器人。当它崩溃时,它只会阻碍我,而不是太多。如果崩溃立即由foreverJs立即重启,它不会影响其效率。我仍在开发它,并学习如何在这个过程中正确使用Node,最后留下罕见的错误处理。此外,你可以删除引言(意味着只笑),问题仍然存在:-) –

回答

3

如果您希望node.js进程在12小时后自行停止,那么您可以从现在开始设置一个计时器12小时,并致电process.exit()

setTimeout(function() { 
    process.exit(0); 
}, 1000 * 60 * 60 * 12); 

如果你想使用的系统像永远,但你都希望在12小时内停止程序并且不希望永远重新启动它,那么你可以只运行一个代上工作,预定从现在开始执行12小时forever stop /somepath/yourscript.js


P.S.没有办法自己经常崩溃的系统是“不小心,但高效”。它可能会很快开始,但它也是松散且危险的,从长远来看永远不是有效的代码编写方式。我建议你开始删除你已经烧入代码的所有technical debt

我从运行开发团队多年以来最喜欢的一句话是有些修辞问题:“为什么没有足够的时间来第一次做对,而是总是有足够的时间去完成它。”

+0

完整的答案与不同的解决方案和建议反对粗心大意。谢谢。尽管如果我补充说:“我是一个最近了解异步编程如何工作的业余学习节点,在构建我的项目时我不断改进以前的代码,而我的主要问题是我从不做任何事情,因为我希望我所做的一切是完美的“,你会继续讲我的话吗? ;-)这篇文章对我来说是一种治疗!干杯! –

+0

@KLôN - 嗯,当你在这里时,你可以阅读[最小可行产品](https://en.wikipedia.org/wiki/Minimum_viable_product),但是它并没有说你的代码应该很差设计和充满了错误。如果你只是在学习,你必须随时学习,但学习的一个非常重要的部分是学习如何编写健壮,稳定的代码来处理错误条件。你不应该认为自动重启是学习如何防止代码崩溃的替代品。 – jfriend00

+0

我完全同意。说实话,我已经开始在绝对需要的时候处理错误,并且我正在计划使用我所学到的来涵盖所有可能的结果。 Thx为您的时间和建议! –

2

您可以使用Linux“at”命令设置相对定时器。永远将处理重新启动脚本,如果它崩溃。

  1. 启动脚本

    forever start /path/yourscript.js

  2. 计划停机命令

    echo 'forever stop /path/yourscript.js' | at now + 12 hours

-

请注意,您可能需要安装“at” - 例如。 (apt-get install at

注意,你还可以安排 “在” 执行shell脚本:

  • 创建一个文件 “stopscript.sh” 包含此行:forever stop /path/yourscript.js
  • 设置一个 “在” 工作: at now +12 hours -f ~/stopscript.sh
1

使用cluster模块,主站在发生错误时重新启动集群。

的高手,只是这样的运行代码:

setTimeout(function() { 
    process.exit(0); 
}, 12 * 3600 * 1000); 
+0

你的数学对于如何从现在开始做12个小时的'setTimeout()'有点不合适。你的因数是1000. – jfriend00

+0

@ jfriend00谢谢指出。 – Calvinxiao

2

如果您使用的是UNIXy操作系统,可以使用at命令在给定时间永远杀。

实施例:

$ echo 'forever stop whatever.js' | at now + 12 hours