PM2启动缓慢报错阻塞服务器开机,SSH无法连接的解决咨询
问题描述
通过以下命令配置PM2开机自启:
npm i -g pm2 pm2 start "node /service/www.js" --name myservice pm2 startup pm2 save
重启Ubuntu服务器后出现异常开机阻塞现象:
- 开机阶段显示
[...] A start job is running for pm2 process manager,持续约3分钟,此时SSH登录成功但无法获取Shell提示符,Apache可正常提供静态HTML服务 - 随后显示
[...] Failed to start pm2 process manager及提示See: systemctl status pm2-root.service,该状态再持续约3分钟,SSH仍不可用 - 最终系统完成开机,SSH可获取Bash提示符,此时PM2运行正常,
systemctl status pm2-root.service无异常
需解决PM2启动延迟阻塞服务器开机的问题。
解决方案
1. 修改PM2服务的启动依赖
PM2默认的systemd服务可能在网络或关键服务未就绪时启动,导致超时阻塞。编辑PM2的systemd配置文件:
sudo nano /etc/systemd/system/pm2-root.service
找到 After= 行,修改为仅依赖必要服务:
After=network.target multi-user.target
确保文件中存在 WantedBy=multi-user.target 配置,之后重新加载systemd配置并重启服务:
sudo systemctl daemon-reload sudo systemctl restart pm2-root.service
2. 缩短PM2服务的启动超时时间
默认启动超时为3分钟,可缩短超时时间避免长时间阻塞:
在上述pm2-root.service文件中添加或修改:
TimeoutStartSec=30
修改后重新加载配置:
sudo systemctl daemon-reload
这样PM2启动超时会快速失败,后续systemd会自动重启服务,不会占用3分钟阻塞窗口。
3. 排查Node.js服务的启动依赖
你的/service/www.js可能依赖未就绪的资源(如数据库、网络存储),导致PM2启动超时。可通过添加启动延迟规避:
pm2 delete myservice pm2 start --name myservice "sleep 10 && node /service/www.js" pm2 save
或在Node.js代码中添加资源就绪检查逻辑,确保服务仅在依赖就绪后启动。
4. 重新生成PM2的systemd配置
若原有配置存在异常,重新生成干净的配置:
pm2 unstartup systemd pm2 startup systemd --service-name pm2-root --user root pm2 save sudo systemctl daemon-reload
内容的提问来源于stack exchange,提问作者Dan Spirit
相关产品推荐
相关产品推荐

