无法修复pm2 syslog错误:pm2-root.service启动后找不到pm2.pid文件
问题根因定位
从提供的系统日志可以明确三个核心故障点:
- pm2注册的systemd服务启动超时:systemd等待
/root/.pm2/pm2.pid文件生成超时后,主动杀死pm2进程触发循环重启 - pm2恢复的业务进程
/opt/tessa5g/server.js启动失败,状态为errored - pm2依赖的
shelljs包与当前服务器的Node.js版本存在兼容性问题,触发大量循环依赖警告
解决步骤
1. 修复Node.js与pm2的兼容性问题
循环依赖警告是shelljs@0.8.4及更低版本与Node.js@14+版本不兼容导致,操作如下:
- 停止当前pm2服务:
systemctl stop pm2-root - 卸载全局pm2:
npm uninstall -g pm2 - 清理pm2残留目录:
rm -rf /root/.pm2 - 安装最新稳定版pm2:
npm install -g pm2@latest
2. 修复systemd服务的PID配置问题
systemd找不到PID文件是默认服务配置的等待逻辑与pm2实际启动节奏不匹配导致,操作如下:
- 编辑pm2-root的systemd配置文件:
nano /etc/systemd/system/pm2-root.service - 修改[Service]段配置,内容如下:
[Service]
Type=forking
PIDFile=/root/.pm2/pm2.pid
TimeoutStartSec=10s
ExecStart=/usr/local/bin/pm2 resurrect
ExecReload=/usr/local/bin/pm2 reload all
ExecStop=/usr/local/bin/pm2 kill
User=root
Restart=on-failure
RestartSec=10s
- 重载systemd配置:
systemctl daemon-reload
3. 修复业务进程启动失败问题
日志显示pm2恢复的server.js进程状态为errored,说明业务代码本身无法正常启动,和pm2无关,操作如下:
- 手动启动业务进程排查报错:
cd /opt/tessa5g && node server.js - 根据终端输出的报错信息修复业务问题(常见原因:端口被占用、依赖未安装、环境变量缺失、文件权限不足)
- 业务进程手动启动正常后,用pm2重新启动:
pm2 start server.js --name server - 保存pm2进程列表:
pm2 save
4. 验证修复结果
- 启动pm2 systemd服务:
systemctl start pm2-root - 查看服务状态:
systemctl status pm2-root,确认服务状态为active(running)无报错 - 查看pm2进程列表:
pm2 ls,确认server进程状态为online
内容的提问来源于stack exchange,提问作者Yoshi
相关产品推荐
相关产品推荐

