温欣爸比

  • 主页
  • Alfred Workflow
  • 《Vim 练级手册》
  • 常用命令
  • 代码笔记
  • 合辑
  • 在线工具
所有文章 友链 关于我

温欣爸比

  • 主页
  • Alfred Workflow
  • 《Vim 练级手册》
  • 常用命令
  • 代码笔记
  • 合辑
  • 在线工具

Node 生产环境部署神器 PM2

2018-02-06

今天偶然发现一个部署 Node 生产环境的神器,pm2.5,哦,不,是PM2



  • 下载
  • 创建应用
  • 配置文件
  • 目录文件
  • 应用列表
  • 查看日志
  • 监控
    • keymetrics
  • 自启动
  • 备份和恢复
  • 其他常用命令


pm2 是一个带有负载均衡功能的 Node 应用的进程管理器
它有如下特点:

  • 后台运行
  • 内建负载均衡
  • 无间断重载
  • 具有启动脚本
  • 停止不稳定的进程
  • 强大的控制台检测
  • 远程控制和实时的接口API

下载

1
$ npm install pm2 -g

创建应用

1
$ pm2 start index.js    # 快速启动应用

/images/pm2-list.png
当看到类似的信息,并且 status=online 时,代表应用启动成功
更多命令如下

1
2
3
4
5
6
7
8
$ pm2 start | restart | stop index.js       # 启动、重启、停止
$ pm2 start app.py # 使用 python 命令启动脚本
$ pm2 start index.js -n index # 启动并指定进程名
$ pm2 start index.js --watch # “热启动” 应用
# --ignore-watch 可以排除再热启动时需要检测的文件,也可以是正则
$ pm2 start index.js -i max # 启动并根据 CPU 开启相应进程数
# 也可以用 -i 2 手动设置
$ pm2 delete <app_name|id|'all'|json_conf> # 删除应用

配置文件

pm2 的启动参数有很多,每次输入这些参数也是很烦人的,我们可以将这些参数放到配置文件中,然后直接启动配置文件即可,创建文件 pm2_config.json

1
2
3
4
5
6
7
8
9
{
"apps" : [{
"name" : "tmdapi",
"script" : "./run_api.py",
"interpreter" : "/Users/wxnacy/.pyenv/shims/python",
"watch" : true,
"ignore_watch" : ['winn', 'tests', 'db'],
}]
}

1
$ pm2 start pm2_config.json

文件格式支持很多种,如 yml, js, json5,更多配置见文档

目录文件

pm2 启动一次后就会生成如下目录,相关日志、pid、配置等都在其中

  • $HOME/.pm2 will contain all PM2 related files
  • $HOME/.pm2/logs will contain all applications logs
  • $HOME/.pm2/pids will contain all applications pids
  • $HOME/.pm2/pm2.log PM2 logs
  • $HOME/.pm2/pm2.pid PM2 pid
  • $HOME/.pm2/rpc.sock Socket file for remote commands
  • $HOME/.pm2/pub.sock Socket file for publishable events
  • $HOME/.pm2/conf.js PM2 Configuration

应用列表

1
$ pm2 list

执行该命令,会显示上图一样的信息,也就是应用列表 pm2 (ls | l) 都可以

1
2
3
$ pm2 logs jlist            # 使用 json 格式在一行中展示
$ pm2 logs prettylist # 将 json 数据格式化后展示出来
$ pm2 list --sort=id # 根据id排序

查看日志

1
$ pm2 logs              # 查看所有进程日志

/images/pm2-logs.png
更多命令

1
2
3
4
5
6
7
$ pm2 logs [app-name | id]      # 查看指定应用日志
$ pm2 logs /api/ # 使用正则来匹配日志
$ pm2 logs --format # 格式化输出
$ pm2 logs --json # json 格式输出日志
$ pm2 logs --lines 1000 # 返回 1000 行日志
$ pm2 flush # 清空所有日志
$ pm2 reloadLogs # 重新加载所有日志

监控

1
$ pm2 monit             # 检测当前进程 CPU、内存、日志

/images/pm2-monit.png
当输入上述命令时,会出现类似上图的界面,在这里我们可以清楚的看到当前进行列表、日志、活跃度、进程详情等信息,使用 左右 来控制面板的焦点,使用 上下键 来滚动屏幕查看信息

keymetrics

如果配合 keymetrics 来使用,监控将变的更加强大
输入注册命令

1
$ pm2 register

根据命令行提示一步步完善注册信息,然后运行

1
$ pm2 monitor [app-name]

或

1
$ pm2 web

会在返回的进程列表中看到一个地址
/images/pm2-monitor.png

进入该地址,并使用刚注册的信息登陆,就可以看到一个更加强大的检测系统
/images/pm2-key.png

自启动

1
2
3
$ pm2 startup                               # 开机自启动
$ pm2 unstartup # 关闭自启
# 或者指定自己的机型

或者指定自己的系统

1
$ pm2 startup [ubuntu | ubuntu14 | ubuntu12 | centos | centos6 | arch | oracle | amazon | macos | darwin | freebsd | systemd | systemv | upstart | launchd | rcd | openrc]

备份和恢复

假如出现机器出现崩溃,那 pm2 进程信息很可能丢失,但是我们可以利用备份来避免这种情况

1
$ pm2 (save | dump)

保存完以后我们利用 kill 来模拟 pm2 丢失的情况

1
$ pm2 kill

接下来使用恢复命令

1
$ pm2 resurrect

这样我们又可以愉快的开发了

其他常用命令

更多的进程命令如下

1
2
3
4
$ pm2 (show | describe) (app-name| id)      # 显示进程详情
$ pm2 reload all # 重新加载索引进程
$ pm2 scale [app-name] 10 # 扩展应用进程数
# 但是如果应用涉及到端口号,则不应该使用这种方式,否则会引起端口冲突

pm2 还有很多强大的功能是我没有提到的,你需要经常使用 pm2 -h /pm2 start -h 等命令查看帮助文档,来更好的完成工作,或者干脆扒一遍文档

  • github
  • usage
最近更新
Alfred Workflow 命令行帮助工具
最近热读
Go 判断数组中是否包含某个 item
Vim 高级功能 vimgrep 全局搜索文件
办理北京工作居住证的一些细节
Go 语法错误:Non-declaration statement outside function body
Mac 电脑查看字体文件位置
扫码关注公众号,或搜索公众号“温欣爸比” 及时获取我的最新文章
赏

谢谢你请我喝咖啡

支付宝
微信
  • node
React 发布到 Nginx 中
Node 使用 puppeteer 抓取动态页面
  1. 1. 下载
  2. 2. 创建应用
  3. 3. 配置文件
  4. 4. 目录文件
  5. 5. 应用列表
  6. 6. 查看日志
  7. 7. 监控
    1. 7.1. keymetrics
  8. 8. 自启动
  9. 9. 备份和恢复
  10. 10. 其他常用命令
© 2017 - 2022 温欣爸比 京ICP备15062634号 总访问量3526次 访客数3478人次 本文总阅读量4次
Hexo Theme Yilia by Litten
  • 所有文章
  • 友链
  • 关于我

tag:

  • python
  • flask
  • javascript
  • docker
  • 工具
  • openresty
  • 微信
  • java
  • hexo
  • 杂谈
  • vim
  • git
  • mysql
  • http
  • linux
  • mac
  • tmux
  • ssh
  • 算法
  • 开发
  • node
  • 杂文
  • jinja2
  • maven
  • spring
  • 北京
  • 生活
  • springboot
  • react
  • shell
  • graphql
  • iterm
  • expect
  • nginx
  • sqlalchemy
  • html
  • electron
  • vagrant
  • elastic
  • 宝贝
  • ansible
  • css
  • jquery
  • go
  • markdown
  • awk
  • redis
  • leetcode
  • zsh
  • 漫威
  • ssr
  • android
  • ffmpeg
  • chrome
  • vmware
  • youtube
  • windows
  • jupyter
  • excel
  • jq
  • Mac
  • Homebrew
  • mongo
  • py2
  • HomeBrew
  • movie
  • nodejs

    缺失模块。
    1、请确保node版本大于6.2
    2、在博客根目录(注意不是yilia根目录)执行以下命令:
    npm i hexo-generator-json-content --save

    3、在根目录_config.yml里添加配置:

      jsonContent:
        meta: false
        pages: false
        posts:
          title: true
          date: true
          path: true
          text: false
          raw: false
          content: false
          slug: false
          updated: false
          comments: false
          link: false
          permalink: false
          excerpt: false
          categories: false
          tags: true
    

  • Guru99
每天看书
每天背单词
每天一篇
写写代码
听听周杰伦
爱爱老婆