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

树莓派上PM2运行的应用一段时间后休眠,无法访问求助

解决树莓派上PM2管理的应用无法访问问题

嘿,我来帮你搞定这个事儿——首先得纠正一个误解:PM2默认绝对不会主动休眠你的进程,你遇到的“无法访问”大概率是进程崩溃、资源耗尽,或者树莓派的低功耗设置影响了运行。下面一步步排查解决:

1. 先搞清楚进程到底是死了还是休眠

先跑个命令看看PM2管理的进程状态:

sudo pm2 status

如果进程显示stopped或者errored,那就是崩溃了,不是休眠。这时候直接看日志找问题最靠谱:

# 查看所有进程的实时日志
sudo pm2 logs
# 单独查看历史追踪器的日志
sudo pm2 logs historytracker
# 单独查看API的日志
sudo pm2 logs app.js

日志里肯定会有崩溃的原因——比如内存爆了、数据库连不上、定时任务抛错之类的。

2. 检查树莓派的低功耗设置

树莓派默认可能会触发系统休眠(尤其是没接屏幕的情况下),这会直接影响进程运行。把系统休眠彻底关掉:

  • 编辑/etc/rc.local文件,在exit 0这一行前面添加:
    sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
    
  • 重启树莓派生效:
    sudo reboot
    

3. 给PM2加个“自动重启保险”

你已经执行了pm2 startup让PM2随系统启动,但还可以配置进程崩溃后自动重启,防止意外挂掉:

# 设置进程崩溃后3秒自动重启(给系统留缓冲时间)
sudo pm2 restart app.js --restart-delay=3000
sudo pm2 restart historytracker --restart-delay=3000
# 保存当前进程列表,确保树莓派重启后PM2自动加载这些应用
sudo pm2 save

另外,树莓派内存有限,可以设置内存阈值,超过就自动重启进程,避免内存泄漏搞崩应用:

# 比如设置进程内存超过200MB就重启
sudo pm2 start app.js --max-memory-restart 200M
sudo pm2 start historytracker --max-memory-restart 200M

4. 验证定时任务的稳定性

你提到历史追踪器用了schedule.scheduleJob('0 */6 * * *'),虽然在其他系统正常,但树莓派可能有时区偏差导致任务没触发?给定时任务加个日志验证:

schedule.scheduleJob('0 */6 * * *', () => {
  console.log(`[${new Date().toISOString()}] 历史追踪器开始执行写入任务`);
  // 你的数据库写入逻辑
  console.log(`[${new Date().toISOString()}] 写入任务完成`);
});

然后看PM2日志,确认每6小时是否有这些日志输出。如果没有,大概率是时区问题,启动进程时指定时区就行:

sudo pm2 start historytracker --env TZ="Asia/Shanghai"

(把时区改成你所在的时区,比如Europe/Brussels)

5. 检查资源占用情况

树莓派的CPU和内存都不算强,长时间运行可能因为内存泄漏导致进程崩溃。用这两个命令看资源:

# 实时查看PM2进程的CPU/内存占用
sudo pm2 monit
# 查看系统整体资源使用
top

如果某个进程的内存一直在涨,那就是代码有内存泄漏——比如数据库连接没释放、定时器没清理,这时候就得回去查代码了。

最后总结

先从日志和进程状态入手,定位是进程崩溃还是系统问题,再针对性解决。PM2不会主动休眠你的应用,别被这个误解带偏啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:09:12