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.js 或 pm2 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/) 转载或引用必须申明原指尖魔法屋来源及源地址!
评论
使用 GitHub 账号登录后即可留言,支持 Markdown。