对于线上项目,如果直接通过 node app 来启动,如果报错了可能直接停止导致整个服务崩溃,一般监控 node 有几种方案。
- supervisor: 一般用作开发环境的使用。
- forever: 管理多个站点,一般每个站点的访问量不大的情况,不需要监控。如果 node 出现问题没有办法获取到有效的监控数据进行错误排查
- PM2: 网站的访问量比较大,需要完整的监控页面。
目录
PM2 的主要特性
- 内建负载均衡(使用 Node cluster 集群模块)
- 后台运行
- 0 秒停机重载
- 具有 Ubuntu 和 CentOS 的启动脚本
- 停止不稳定的进程(避免无限循环)
- 控制台检测
- 提供 HTTP API
- 远程控制和实时的接口 API ( Nodejs 模块,允许和 PM2 进程管理器交互 )
// 全局安装pm2,依赖node和npm
npm install -g pm2
// start命令启动对应的node server文件
pm2 start
//启动进程/应用
pm2 start app.js //启动app.js应用
pm2 start app.js --name demo //启动应用并设置name
pm2 start app.sh //脚本启动
//查看进程/应用详细状态信息
pm2 show [AppName|ID]
//重命名进程/应用
pm2 start app.js --name [AppName|ID]
//添加进程/应用
watch pm2 start bin/www --watch
//列出所有进程/应用
pm2 list
//查看某个进程/应用具体情况
pm2 describe [AppName|ID]
//监控每个 node 进程的 cpu 和内存使用情况
pm2 monit
//监听模式
pm2 start app.js --watch //当文件发生变化,自动重启
//查看pm2的日志
pm2 logs
//若要查看某个进程/应用的日志,使用
pm2 logs [AppName|ID]
//重新启动进程/应用
pm2 restart [AppName|ID]
//重新启动所有进程/应用
pm2 restart all
//结束进程/应用
pm2 stop [AppName|ID]
//结束所有进程/应用
pm2 stop all
//删除进程/应用
pm2 delete [AppName|ID]
//删除所有进程/应用
pm2 delete all
配置 PM2 启动文件
pm2.config.js
module.exports = {
apps: [
{
name: 'kaifazhe', // 应用名称
script: './build/server.js', // 启动文件地址
cwd: './', // 当前工作路径
watch: [
// 监控变化的目录,一旦变化,自动重启
'src',
'build',
],
ignore_watch: [
// 忽视这些目录的变化
'node_modules',
'logs',
'public',
],
node_args: '--harmony', // node的启动模式
env: {
NODE_ENV: 'development', // 设置运行环境,此时process.env.NODE_ENV的值就是development
ORIGIN_ADDR: 'http://www.yoduao.com'
},
env_production: {
NODE_ENV: 'production',
},
out_file: './logs/out.log', // 普通日志路径
error_file: './logs/err.log', // 错误日志路径
merge_logs: true,
log_date_format: 'YYYY-MM-DD HH:mm Z',
},
],
};