Nodejs forever 无法启动后台进程

Nodejs forever 无法启动后台进程

我用forever去start了一个进程,看文档是Start SCRIPT as a daemon,以后台方式启动的,但此时却弹出了一个node的界面(不能输入,也没有输出) 用forever去list,显示没有进程在跑…… 再关闭node的界面,自动重启两到三次后才能关闭 这个是为何…… 安装时是npm install forever -g

E:>forever start abc.js warn: --minUptime not set. Defaulting to: 1000ms warn: --spinSleepTime not set. Your script will exit if it does not stay up f or at least 1000ms info: Forever processing file: abc.js

E:>forever list info: No forever processes running

E:>


5 回复

Nodejs forever 无法启动后台进程

问题描述

我在使用 forever 启动一个 Node.js 进程时遇到了一些问题。根据文档,forever start 命令应该以守护进程的方式启动脚本,但在执行命令后,弹出了一个不可交互的 Node.js 界面,且 forever list 指令显示没有进程在运行。此外,当我尝试关闭这个 Node.js 界面时,它会自动重启两到三次后才最终关闭。

环境与安装

  • 安装方式:npm install forever -g

具体步骤与错误信息

E:>forever start abc.js
warn:    --minUptime not set. Defaulting to: 1000ms
warn:    --spinSleepTime not set. Your script will exit if it does not stay up for at least 1000ms
info:    Forever processing file: abc.js
E:>forever list
info:    No forever processes running

可能的原因与解决方法

  1. 缺少配置项

    • 在启动时,forever 提示了两个警告信息,说明没有设置 --minUptime--spinSleepTime。这两个参数是必要的,因为它们定义了进程的最小运行时间和进程重启之间的等待时间。
    // 示例代码:设置 minUptime 和 spinSleepTime
    const forever = require('forever-monitor');
    
    let child = new (forever.Monitor)('abc.js', {
      minUptime: 2000,      // 进程至少需要运行2秒
      spinSleepTime: 1000,  // 如果进程退出,则等待1秒后重新启动
    });
    
    child.on('start', function() {
      console.log('Process started!');
    });
    
    child.start();
    
  2. 脚本问题

    • 确保 abc.js 脚本本身没有问题,并且能够正常运行。如果脚本中有错误或阻塞操作,可能会导致进程无法正常启动。
  3. 权限问题

    • 确认你是否有足够的权限来运行 forever 命令。某些情况下,权限不足可能导致进程无法正常启动。
  4. 环境变量

    • 确保你的环境变量正确配置,特别是 Node.js 的路径。
  5. 日志文件

    • 查看 forever 的日志文件,以获取更多关于进程失败的详细信息。你可以通过以下命令查看日志:
    E:>forever logs
    

总结

确保正确配置 forever 的参数,并检查脚本本身是否存在问题。同时,确认环境变量和权限配置正确。如果问题仍然存在,可以查看 forever 的日志文件以获得更多信息。


你可以使用pm2, 易用性及所能管理进程能力比forever要强大多了

建议使用pm2

直接使用node可以运行吗

你遇到的问题可能是由于 forever 在启动脚本时未能正确地将进程分离到后台。为了解决这个问题,你需要确保你的命令配置正确,并且使用正确的参数来启动进程。

解决方案

1. 确认 forever 版本

首先,确认你的 forever 是否是最新的版本。你可以通过以下命令更新:

npm update -g forever

2. 使用正确的 forever 启动命令

确保你在启动时指定了合适的参数。通常情况下,你需要设置最小运行时间 (--minUptime) 和检查间隔 (--spinSleepTime)。这些参数确保了进程能够在出现异常时被正确重启。

forever start --minUptime 1000 --spinSleepTime 1000 abc.js

3. 检查你的脚本 (abc.js)

确保你的脚本 (abc.js) 正确运行并且不会立即退出。例如,如果你的脚本只是一个简单的 console.log('Hello'),它可能在打印完之后就结束了,导致 forever 以为它已经退出并尝试重启。

示例脚本:

// abc.js
const http = require('http');

http.createServer((req, res) => {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
}).listen(3000);

console.log('Server is running on port 3000');

4. 验证进程状态

再次运行 forever list 查看进程是否已经成功启动。

forever list

如果仍然有问题,请检查是否有任何错误信息输出,并查看 forever 的日志文件,通常位于 ~/.forever/ 目录下,或者通过以下命令指定日志目录:

forever start --logFile /path/to/logfile abc.js

以上步骤应该能帮助你解决 forever 无法正常启动后台进程的问题。

回到顶部