与Node.js一起使用forever

与Node.js一起使用forever,node.js,Node.js,我有几个关于Node.js永远使用的问题,可能很简单。从我所读到的内容来看,forever可以编程使用,它维护了一个包含所有forever脚本的列表。当该进程终止时,它会自动生成一个新进程,直到停止为止 然而,我的问题是,“永远”是如何做到这一点的?它是否也添加了要在引导时启动的脚本 您可以像这样编程使用forever: 在node.js脚本中使用永久实例: var forever = require('forever-monitor'); var child = new (forever

我有几个关于Node.js永远使用的问题,可能很简单。从我所读到的内容来看,forever可以编程使用,它维护了一个包含所有forever脚本的列表。当该进程终止时,它会自动生成一个新进程,直到停止为止


然而,我的问题是,“永远”是如何做到这一点的?它是否也添加了要在引导时启动的脚本

您可以像这样编程使用forever:

在node.js脚本中使用永久实例:

var forever = require('forever-monitor');

  var child = new (forever.Monitor)('your-filename.js', {
    max: 3,
    silent: true,
    options: []
  });

  child.on('exit', function () {
    console.log('your-filename.js has exited after 3 restarts');
  });

  child.start();
您应该花一分钟的时间,仔细阅读优秀文档中提供的选项,以便永远使用

你也可以永远聆听许多事件:

  • 错误[错误]:发生错误时引发
  • start[进程、fvrFile、数据]:首次启动目标脚本时引发
  • 停止[进程]:当用户停止目标脚本时引发
  • 保存[路径,数据]:目标监视器将pid信息保存到磁盘时引发
  • 重新启动[永久]:每次重新启动目标脚本时引发
  • exit[forever]:在目标脚本实际退出(永久退出)时引发
  • stdout[数据]:从子进程的stdout接收数据时引发
  • stderr[数据]:从子进程的stderr接收数据时引发
它通过将事件侦听器附加到您试图运行的脚本并以优雅的方式处理它们来实现这一点

如果你想看一看它到底是如何做到的,那么它的文档记录就相当好了

您还应该阅读这篇关于如何让流程永远运行的文章


至于第二个问题:不,它没有将其添加到启动时启动。为此,您需要将它添加为一个或使用类似于监视和启动它的东西。为此,你应该看看。这是一篇很棒的教程。

这是一篇老文章,但我在谷歌上偶然发现了这篇文章——它有点过时了,因为它永远将命令行版本从编程版本中分离出来。你需要使用而不是。示例代码现在应该是

 var forever = require('forever-monitor');

  var child = new (forever.Monitor)('your-filename.js', {
    max: 3,
    silent: true,
    options: []
  });

  child.on('exit', function () {
    console.log('your-filename.js has exited after 3 restarts');
  });

  child.start();

我试图建议对原始答案进行编辑,但被拒绝的权力。我想我可以腾出一些其他人的时间来找出示例代码不起作用的原因:-)

谢谢你@Dan Davies Bracket你的下半部分答案正是我想要的。我不确定这是否是我必须做的,所以谢谢你的帮助。很高兴我能帮上忙。一定要阅读关于部署节点的教程。在过去的几个项目中,我成功地使用了这种方法,并进行了一些调整。我已经在github上看到了永远的页面,这是一个upstart和monit教程,现在我将阅读。Thanks@slickplaid你能解释一下代码的作用吗?因为我想在每次服务器崩溃或站点关闭时以编程方式重新启动node.js脚本/服务器。如果脚本死了或者站点没有给出200 OK,我如何以编程方式处理它以自动重新启动脚本?您能解释一下代码的作用吗?因为我想在每次服务器崩溃或站点关闭时以编程方式重新启动node.js脚本/服务器。如果脚本死了,我如何以编程方式处理它以自动重新启动脚本?@Faizan我建议从命令行而不是在代码中使用forever。如果服务器重新启动,您可以在crontab中添加一个“@reboot”条目以再次启动它。pm2也值得一看。