You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何用PM2启动的极简Node.js应用持续自动重启?

问题排查与解决

核心原因

你的应用启动后会立即退出,因为app.js中的代码执行完所有逻辑后,没有任何维持进程存活的机制。PM2的默认行为是检测到进程退出时自动重启,以此保证应用持续运行,所以才会出现持续重启的情况。

看你的app.js代码:init方法仅打印日志,没有启动长期运行的服务(比如HTTP服务器),也没有挂起进程的逻辑。代码执行完毕后,Node.js进程会自然终止,PM2会判定进程异常退出,进而不断触发重启。

解决办法

方法1:添加维持进程存活的逻辑

如果是测试场景,可以手动挂起进程,在代码末尾添加:

// 阻止进程自动退出
process.stdin.resume();

如果是实际业务应用,建议启动一个长期运行的任务,比如HTTP服务:

const http = require('http');

class App {
    async init() {
        console.log('App started');
        this.server = http.createServer((req, res) => {
            res.end('Hello World');
        });
        await new Promise(resolve => this.server.listen(3000, resolve));
        console.log('Server running on port 3000');
    }
}

const app = new App();

app
    .init()
    .catch(err => console.log('Error initializing app: ', err));

方法2:修改PM2配置禁用自动重启

如果你的需求就是让进程执行一次就退出,可以在ecosystem.config.js中添加autorestart: false:

module.exports = {
    apps: [
        {
            name: 'main-app',
            script: './app.js',
            output: "./logs/app-out.log",
            error: "./logs/app-error.log",
            watch: false,
            autorestart: false // 新增:进程退出后不再自动重启
        }
    ]
};

验证步骤

  1. 查看PM2进程状态,确认进程是否频繁重启:
pm2 status
  1. 查看应用日志,确认进程退出的具体情况:
pm2 logs main-app

日志会显示进程启动后很快退出的记录,可进一步验证问题原因。

内容的提问来源于stack exchange,提问作者Zak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 11:09:53