pm2的相关操作记录

pm2: Advanced, production process manager for Node.js

服务器上跑 Node 脚本、Hexo 预览或小型 API,关掉 SSH 进程就挂。PM2 负责守护、重启和看多实例。下面是我当时记的几条命令和一个用 child_process 拉起 hexo 的示例。


//run.js

const { exec } = require('child_process')

exec('hexo s',(error, stdout, stderr) => {

    if(error){

         console.log(`exec error: ${error}`)

         return

    }

    console.log(`stdout: ${stdout}`);

    console.log(`stderr: ${stderr}`);

})

exec 会起子 shell,适合一条命令;长期服务更常见是 pm2 start app.js 直接盯入口文件。示例里 hexo 输出进 pm2 日志,用 pm2 logs 看。

pm2 delete all

删除所有进程

清空前 pm2 list 确认名单,别误杀线上别的服务。

pm2 start run.js

启动run.js fork模式

默认 fork,单进程。改代码后 pm2 restart run.jspm2 reload(集群模式更友好)。

pm2 start run.js -i 2

启动run.js 创建两个进程

-i 2 开两个实例,适合无状态 HTTP;Hexo 这种单端口预览别开多实例,会端口冲突。

常用还有 pm2 save + pm2 startup 做开机自启,换机部署时记得在新机器上再跑一遍 startup 生成的命令。

生产环境还要补齐的事

PM2 能帮忙拉起进程,但它不会自动保证应用可用。部署时还要设置日志轮转、内存上限、优雅退出和启动失败告警,并用 pm2 save 与对应的 startup 配置确保重启后恢复。更新应用时不要只看 PM2 状态是 online,还要请求健康检查接口并查看错误日志。如果进程频繁重启,先解决应用异常,不要让自动重启把问题隐藏起来。

可用性说明:本文发布于 2019 年 10 月,距今已超过五年。文中涉及的软件版本、接口、下载地址、命令参数和操作界面可能已经发生变化,部分方案在当前环境下可能失效。请结合官方最新文档核对后再操作,生产环境使用前务必先行验证。

版权声明: 本文首发于 指尖魔法屋-pm2的相关操作记录https://blog.thinkmoon.cn/post/514-deploy-practice-pm2-nodejs/) 转载或引用必须申明原指尖魔法屋来源及源地址!