NodeJs:维护一个脚本运行一段给定的时间

NodeJs : maintain a script running for a given time?

本文关键字:一段 时间 一个 维护 NodeJs 脚本 运行      更新时间:2023-09-26

我快速而糟糕地编写了一个Node.Js脚本,但没有任何错误处理,这会完成任务,并最终在遇到错误时崩溃。粗心但高效。

为了保持它的运行,我可以永远使用npm,并让它永远重新启动。想要

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

有什么简单的方法可以实现这样的行为吗?

如果你想让node.js进程在12小时后自行停止,你只需要设置一个12小时的计时器,然后调用process.exit()

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

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


附言:一个偶尔会自行崩溃的系统不可能是"粗心但高效的"。它可能很快就开始了,但它也很松散和危险,从长远来看从来都不是有效的编码方式。我建议您开始消除代码中的所有技术债务。

多年来,我最喜欢管理开发团队的一句话是一个有点修辞意义的问题:"为什么从来没有足够的时间第一次做对,但总是有足够的时间重新做对。"

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

示例:

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

您可以使用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中,只需运行这样的代码:

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