PM2是一个带有负载均衡功能的Node应用的进程管理器,可以利用它来简化很多node应用管理的繁琐任务,如性能监控、自动重启、负载均衡等,而且使用非常简单,本文主要总结一下PM2的使用方法。

官方文档请移步:PM2官方地址

1、PM2的主要特性

  • 内建负载均衡(使用Node cluster 集群模块)
  • 后台运行
  • 0秒停机重载,我理解大概意思是维护升级的时候不需要停机.
  • 具有Ubuntu和CentOS 的启动脚本
  • 停止不稳定的进程(避免无限循环)
  • 控制台检测
  • 提供 HTTP API
  • 远程控制和实时的接口API ( Nodejs 模块,允许和PM2进程管理器交互 )

2、PM2的安装

全局安装:

npm install -g pm2

3、PM2安装目录介绍

pm2安装好后,会自动创建下面目录

  • - ```$HOME/.pm2/logs``` 说明:包含所有应用的日志
    - ```$HOME/.pm2/module_conf.json``` 说明:包含所有模块的配置文件
    - ```$HOME/.pm2/modules``` 说明:包含所有模块内容
    - ```$HOME/.pm2/pids``` 说明:包含所有应用的pid
    - ```$HOME/.pm2/pm2.log``` 说明:PM2的日志
    - ```$HOME/.pm2/pm2.pid``` 说明:PM2自身的pid
    - ```$HOME/.pm2/pub.sock``` 说明:可发布事件的Socket文件-
    

    $HOME/.pm2/rpc.sock``` 说明:远程命令的Socket文件

  • 
    ### 4、PM2启动参数介绍
    - ```--watch```:监听应用目录的变化,一旦发生变化,自动重启。如果要精确监听、不见听的目录,最好通过配置文件
    - ```-i --instances```:启用多少个实例,可用于负载均衡。如果``` -i 0``` 或者``` -i max``` ,则根据当前机器核数确定实例数目
    - ```--max-memory-restart 20M```:在超过使用内存20M上限后自动重启
    - ```--ignore-watch```:排除监听的目录/文件,可以是特定的文件名,也可以是正则。比如```--ignore-watch="test node_modules "some scripts""```
    - ```-n --name```:应用的名称,查看应用信息的时候可以用到
    - ```-o --output <path>```:标准输出日志文件的路径
    - ```-e --error <path>```:错误输出日志文件的路径
    - ```--interpreter <interpreter>```:the interpreter pm2 should use for executing app (bash, python...)。比如你用的coffee script来编写应用
    
    ### 5、PM2常用命令介绍
    - ```pm2 start app.js -i 4```:开启4个进程
    - ```pm2 start app.js -i max```:根据机器CPU核数,开启对应数目的进程
    - ```pm2 start app.js --name myapp```:以myapp命名启动进程,如果--name参数没有设置,默认的进程名字为js文件的名字,如app.js启动之后,进程名称就是app
    - ```pm2 list```:显示所有进程状态
    - ```pm2 monit```:监视所有进程
    - ```pm2 logs``` :显示所有进程日志
    - ```pm2 stop all```:停止所有进程
    - ```pm2 restart all```:重启所有进程
    - ```pm2 reload all```:0秒停机重载进程 (用于 NETWORKED 进程)
    - ```pm2 stop id|name```:根据ID或NAME停止指定的进程
    - ```pm2 restart id|name```:根据ID或NAME重启指定的进程
    - ```pm2 delete id|name```:根据ID或NAME杀死指定的进程
    - ```pm2 delete all```:杀死全部进程
    - ```pm2 start app.js -x```:用fork模式启动app.js而不是使用 cluster
    - ```pm2 start app.js -x -- -a 23```:用fork模式启动 app.js 并且传递参数 (-a 23)
    
    ### 6、PM2开机自动启动
    开机启动细节可参考官方文档:<a href="http://pm2.keymetrics.io/docs/usage/startup/" target="_blank">PM2 开机启动说明</a>,主要过程如下:
    
    **①、保存当前进程状态:**
    
    使用命令```pm2 save```保存当前进程状态
    
    **②、使用开机启动命令:**
    
    PM2针对不同操作系统的命令如下:
    - ```systemd```: Ubuntu >= 16, CentOS >= 7, Arch, Debian >= 7
    - ```upstart```: Ubuntu <= 14
    - ```launchd```: Darwin, MacOSx
    - ```openrc```: Gentoo Linux, Arch Linux
    - ```rcd```: FreeBSD
    - ```systemv```: Centos 6, Amazon Linux
    
    **③、进一步执行命令:**
    
    若步骤②生成了新的开机启动命令,将生成的命令粘贴到控制台执行,搞定,若没有生成新的命令,那就是执行成功了。<font color="red">强烈建议运行完成之后,重启机器,看是否设置成功。</font>
    
    ### 7、远程部署
    暂时没用到,想知道的可参考官方说明:<a href="http://pm2.keymetrics.io/docs/usage/deployment/#getting-started" target="_blank">PM2远程部署说明</a>
    ### 8、更新PM2
    **①、保存进程状态:**
    

pm2 save

**②、使用NPM更新:**

npm install pm2@latest -g

**③、更新进程:**

pm2 update

### 9、PM2编程接口
如果想把PM2的进程监控,跟其他自动化流程整合起来,可以使用PM2的编程接口,细节可参考官方文档:<a href="http://pm2.keymetrics.io/docs/usage/pm2-api/" target="_blank">PM2 API说明</a>
### 10、模块扩展系统

PM2支持第三方扩展,比如常用的```log、rotate```等,细节可参考官方文档:<a href="http://pm2.keymetrics.io/docs/advanced/pm2-module-system/" target="_blank">PM2 模块使用说明</a>

以上就是使用PM2过程中暂时性的总结,以后用到其它内容会后续补充。

### 11、使用配置文件启动应用

json { “apps”: [{ “name”: “projectname”, “script”: “production.js”, “cwd”: “/data/www/project”, “exec_mode”: “fork”, “max_memory_restart”: “1G”, “autorestart”: true, “node_args”: [], “args”: [], “env”: {

}

}] }


使用如下命令启动

sh pm2 start /data/www/project/pm2.json ```