Ubuntu服务器上PM2进程自动停止,如何持久化运行Node.js应用?
解决PM2进程消失、列表为空的问题
1. 确保PM2随系统开机自启
PM2本身如果没配置开机启动,服务器重启后会直接消失;要是PM2进程自己崩溃了,也会导致进程列表清空。先执行:
pm2 startup ubuntu
执行完会弹出一条需要你手动运行的系统命令(比如systemctl enable pm2-root之类的),照着执行就行。然后保存当前的PM2进程列表,确保重启后自动恢复:
pm2 save
2. 查看日志找根因
别瞎猜问题,先看日志:
- PM2自身的日志在
~/.pm2/pm2.log,实时查看用:tail -f ~/.pm2/pm2.log - 你的应用日志直接用PM2命令看:
pm2 logs backend
日志里大概率能找到PM2崩溃、应用异常退出的细节——比如内存爆了、有未捕获的错误,或者PM2本身的bug。
3. 修正启动命令的路径问题
你现在先cd myapp再启动的方式不靠谱,要是PM2的工作目录出问题,很容易丢进程。直接在启动命令里指定应用的绝对路径:
pm2 start npm --name='backend' --cwd /实际路径/myapp -- start
把/实际路径/myapp换成你应用的真实绝对路径,这样不管在哪个目录执行命令,PM2都能找到正确的启动目录。
4. 配置PM2的重启策略
给PM2明确配置重启规则,避免异常退出后无法自动恢复:
先重启应用并设置参数:
pm2 restart backend --max-restarts 10 --restart-delay 3000
或者更稳妥的是用配置文件管理:
生成配置文件:
pm2 ecosystem
编辑生成的ecosystem.config.js,填上你的应用信息:
module.exports = { apps : [{ name: 'backend', script: 'npm', args: 'start', cwd: '/实际路径/myapp', max_restarts: 10, restart_delay: 3000 }] };
然后用配置文件启动:
pm2 start ecosystem.config.js
5. 检查系统资源
要是服务器内存不够,系统会直接杀掉PM2或者Node进程。用free -h看内存剩余,htop看实时资源占用。如果内存不足,要么升级服务器,要么优化你的Node应用(比如排查内存泄漏、开启内存监控)。
6. 更新PM2到最新版本
旧版本PM2可能存在导致进程消失的bug,先更新:
npm install pm2@latest -g pm2 update
更新完重新启动应用并执行pm2 save。
内容的提问来源于stack exchange,提问作者Nandhini Rajkumar
相关产品推荐
相关产品推荐

