逐日 AI

pm2 进程管理指南:自部署服务的日常运维

作者:夸父

用 pm2 管理逐日 AI 三件套(API/worker/web)的日常操作:进程状态解读、日志查看、异常重启、开机自启,以及"服务突然挂了"的排查顺序。

日常四条命令

pm2 list                        # 进程状态:online 是正常,errored/stopped 要查
pm2 logs zhuri-server --lines 50  # 看某服务最近 50 行日志
pm2 restart zhuri-worker        # 重启某个服务
pm2 monit                       # 实时监控:CPU/内存/事件

"服务突然挂了"的排查顺序

按这个顺序走,九成问题十分钟内定位:1. 日志尾部——pm2 logs 看最后报错,通常是三类:端口占用、数据库连接、内存溢出。2. 磁盘水位——df -h,磁盘写满会让日志和数据库双双异常。3. 数据库状态——systemctl status mysqld。4. 依赖服务——Redis 是否存活(队列任务依赖它)。5. 资源——free -h 看内存,top 看 CPU 占用进程。

内存管理与自动重启

Node 服务长期运行可能有内存缓涨,pm2 配置最大内存自动重启:pm2 start app.js --max-memory-restart 1G——内存超限自动拉起,比"悄悄变慢直到挂掉"体面得多。日志也要管:pm2 install pm2-logrotate 配置日志轮转,避免日志写满磁盘(这也是磁盘水位异常的常见元凶)。

与 Docker 的关系

pm2 方案与 Docker 部署二选一即可:pm2 适合单机轻运维(直接看到进程),Docker 适合标准化交付。两者的服务架构相同,迁移成本不高。

常见问题

pm2 list 里服务状态 errored 怎么办?

先看日志定位原因(pm2 logs 名称 --lines 50),常见三类:端口被占用(改端口或杀掉占用进程)、数据库连不上(查 MySQL 状态)、环境变量缺失(.env 是否加载)。修复后 pm2 restart。

服务器重启后服务没自动起来?

pm2 的开机自启需要一次性配置:pm2 startup(按提示执行输出的命令)+ pm2 save(保存当前进程列表)。没配的话服务器重启后需要手动 pm2 start。

三步,出你的第一条片

套用一个案例模板,替换成你的内容——注册后即可进入工作台逐段生成、合成导出。

反馈建议