Nodejs:forever让nodejs应用后台执行

发布于 1周前 作者 yuanlaile 来自 nodejs/Nestjs

Nodejs:forever让nodejs应用后台执行

nodejs一般是当成一条用户命令执行的,当用户断开客户连接,运用也就停了,很烦人。如何让nodejs应用当成服务,在后台执行呢?

最简单的办法:

$ nohup node app.js &

但是,forever能做更多的事情,比如分别记录输出和错误日志,比如可以在js中作为api使用。

$ sudo npm install forever -g   #安装
$ forever start app.js          #启动
$ forever stop app.js           #关闭
$ forever start -l forever.log -o out.log -e err.log app.js   #输出日志和错误

命令语法及使用 https://github.com/nodejitsu/forever


11 回复

Nodejs:forever让nodejs应用后台执行

在开发和部署Node.js应用时,经常会遇到一个问题:当我们通过终端启动Node.js应用后,如果关闭终端,应用也会随之停止运行。为了解决这个问题,我们可以使用forever工具,它可以帮助我们将Node.js应用作为后台服务运行,并且提供了丰富的功能来管理这些应用。

最简单的办法

首先,我们可以通过nohup命令将Node.js应用在后台运行:

$ nohup node app.js &

这种方式虽然简单,但功能有限。它不会自动重启崩溃的应用,也没有详细的日志记录功能。

使用forever

为了更好地管理和监控Node.js应用,推荐使用forever工具。forever不仅可以将应用在后台运行,还可以记录应用的日志、重启崩溃的应用等。

  1. 安装forever

    首先需要全局安装forever

    $ sudo npm install forever -g
  2. 启动应用

    使用forever start命令启动应用:

    $ forever start app.js
  3. 关闭应用

    使用forever stop命令关闭应用:

    $ forever stop app.js
  4. 指定日志文件

    可以通过参数指定输出日志和错误日志文件:

    $ forever start -l forever.log -o out.log -e err.log app.js

    这样,所有标准输出会被记录到out.log文件,而错误信息会被记录到err.log文件。

  5. 查看应用状态

    可以通过以下命令查看正在运行的应用的状态:

    $ forever list

在代码中使用forever API

除了通过命令行使用forever外,你也可以在Node.js应用中直接使用forever的API来管理应用生命周期。例如,你可以通过以下方式在应用中启动自身:

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

const child = new (forever.Monitor)('app.js', {
    max: 3,         // 应用崩溃后最大重启次数
    silent: false,  // 不隐藏输出
    options: []     // 传递给node的参数
});

child.on('exit', function () {
    console.log('app.js has exited');
});

child.start();

这种方式可以在应用内部进行更复杂的逻辑控制,例如根据某些条件决定是否重启应用。

总之,forever是一个非常强大的工具,可以极大地简化Node.js应用的后台管理和维护工作。


我遇到 stop 不能正常执行的… 不知道怎么办诶

start之后再运行list,显示“info: No forever processes running”,运行stop、restart等无效,难道进程不是持续的? 还有看文档“-w”参数是监视js文件改动的吧,是不是文件改动后即自动重载呢?可是感觉没有效果啊

嗯 ,就是一个协助nodejs自启动的工具,可惜是外部的。如果部署到云端服务器,这个就没有作用了。有的web框架中可以实现自启动,如果文件发生改变自启动,如果出现异常自启动,如果程序假死自启动。但是好像都需要配置一下。

看到这个了,有空试一下这个.

为什么我用npm install 安装forever出现错误enter image description here

求各位大神解救~或是除了以上方法还有什么方法能够安装forever呢?

nohup node app.js &

这个有问题的,关闭控制台后再有输出NODE就变僵尸了

nohup node app.js > /foo/log.txt 2>&1 & 足矣

个人觉着forever的几个好处

1, daemon 不用自己写 2, 自动重启, 特别适合web项目 3, 进程管理

forever -w app.js -w 参数是自动监控文件变化,文件修改保存了自动重启app.js。非常爽。唯一不爽的是那个 .foreverignore 不起作用,作者一直没有修改。

要让Node.js应用在后台持续运行,并且能够管理应用的启动、停止以及日志输出,可以使用forever工具。forever可以让Node.js应用像服务一样在后台运行,同时提供详细的日志记录功能。

安装

首先,需要全局安装forever

$ sudo npm install -g forever

使用

启动应用

要启动一个Node.js应用并使其在后台运行,可以使用以下命令:

$ forever start app.js

这会启动app.js,并且如果该进程意外退出,forever会自动重启它。

停止应用

如果想要停止正在运行的应用,可以使用以下命令:

$ forever stop app.js

查看运行状态

查看所有由forever管理的进程的状态:

$ forever list

日志管理

如果你想分别记录输出和错误日志,可以这样做:

$ forever start -l forever.log -o out.log -e err.log app.js
  • -l 指定一个文件来存储所有日志信息。
  • -o 指定一个文件来存储标准输出。
  • -e 指定一个文件来存储标准错误输出。

这样配置后,out.log文件将包含程序的标准输出,而err.log文件将包含程序的错误输出。

API使用

除了通过命令行使用外,你还可以在Node.js应用中通过API调用forever。例如:

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

let child = new (forever.Monitor)('app.js', {
  max: 3, // 最多重启3次
  silent: false, // 是否静默输出
  options: [
    '--harmony'
  ]
});

child.on('start', () => {
  console.log('Child process started');
});

child.on('stop', () => {
  console.log('Child process stopped');
});

child.start();

上述代码创建了一个新的forever监控器实例,用来运行app.js。如果进程退出,它会根据配置尝试重启。你可以监听不同的事件(如startstop)来处理进程启动或停止时的逻辑。

以上就是使用forever让Node.js应用后台运行的基本介绍。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!