NodeJs:在给定时间内维护脚本 运行?

NodeJs : maintain a script running for a given time?

我快速而糟糕地编写了一个 Node.Js 脚本,没有任何类型的错误处理来完成工作,并最终在遇到错误时偶尔崩溃。粗心但高效。

为了保持它 运行ning,我可以永远使用 npm 并让它永远重新启动。喜欢。

现在假设我希望它 运行 12 小时(使用一些模块/代码在崩溃后重新启动它)然后完全停止。

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

如果您希望 node.js 进程在 12 小时后自行停止,您只需设置一个从现在起 12 小时的计时器并调用 process.exit()

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

如果你想永远使用一个系统,但是你既想在12小时内停止程序又不想永远重新启动它,那么你可以运行一个chron job,计划从现在开始12小时执行forever stop /somepath/yourscript.js.


P.S。一个经常自己崩溃的系统不可能是"careless, but efficient"。它可能上手很快,但它也很松散且危险,并且绝不是在长 运行 中编写代码的有效方法。我建议您开始删除所有嵌入到代码中的 technical debt

运行宁开发团队多年来我最喜欢的一句话是有点反问:"Why is there never enough time to do it right the first time, but always enough time to do it over to get it right."

您可以使用Linux "at"命令来设置相对定时器。 Forever 将在脚本崩溃时重新启动它。

  1. 开始你的脚本

    forever start /path/yourscript.js

  2. 安排停止命令

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

--

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

请注意,您还可以安排 "at" 执行 shell 脚本:

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

使用cluster模块,master出错时重启集群

在 master 中,只需 运行 代码如下:

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

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

示例:

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