地址 : https://github.com/Unitech/pm2
pm2 是一个带有负载均衡功能的Node应用的进程管理器.
当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进程永远都活着,0秒的重载, PM2是完美的。它非常适合IaaS结构,但不要把它用于PaaS方案(随后将开发Paas的解决方案).
备注:SaaS、PaaS和IaaS是云服务模式。
SaaS 软件即服务,例如Google的 Gmail 邮箱服务.面向应用型用户.
PaaS 平台即服务.例如Google的GAE,面向开发型用户
IaaS 基础架构即服务,例如亚马逊的AWS,IaaS对于不知道新推出的应用程序/网站会有多成功的创业公司来说非常有用
请参考 云服务模式:SaaS、PaaS和IaaS,哪一种适合你?
主要特性:
内建负载均衡(使用Node cluster 集群模块)
后台运行
0秒停机重载,我理解大概意思是维护升级的时候不需要停机.
具有Ubuntu和CentOS 的启动脚本
停止不稳定的进程(避免无限循环)
控制台检测
提供 HTTP API
远程控制和实时的接口API ( Nodejs 模块,允许和PM2进程管理器交互 )
检查npm版本,最小版本v6.1.0
$ npm -v
v5.6.0
升级npm
$ npm i -g npm
1. 安装pm2
npm install -g pm2
进入到你的node项目下:
pm2 start index.js --name 'test' # index.js是我的启动脚本
scort@scort-Lenovo-IdeaPad-U310:~/websocket$ pm2 start index.js --name 'test'
[PM2] Starting /home/scort/websocket/index.js in fork_mode (1 instance)
[PM2] Done.
┌───────┬──────┬─────────┬───┬─────┬───────────┐
│ Name │ mode │ status │ ↺ │ cpu │ memory │
├───────┼──────┼─────────┼───┼─────┼───────────┤
│ index │ fork │ stopped │ 0 │ 0% │ 0 B │
│ test │ fork │ online │ 0 │ 0% │ 19.4 MB │
└───────┴──────┴─────────┴───┴─────┴───────────┘
Use `pm2 show <id|name>` to get more details about an app
监视
$ pm2 moint
2. 把pm2加入系统启动中
$ pm2 startup ubuntu
[PM2] Init System found: systemd
-----------------------------------------------------------
PM2 detected systemd but you precised ubuntu
Please verify that your choice is indeed your init system
If you arent sure, just run : pm2 startup
-----------------------------------------------------------
Platform ubuntu
Template
[Unit]
Description=PM2 process manager
Documentation=https://pm2.keymetrics.io/
After=network.target
[Service]
Type=forking
User=root
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
Environment=PATH=/usr/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Environment=PM2_HOME=/root/.pm2
PIDFile=/root/.pm2/pm2.pid
ExecStart=/usr/lib/node_modules/pm2/bin/pm2 resurrect
ExecReload=/usr/lib/node_modules/pm2/bin/pm2 reload all
ExecStop=/usr/lib/node_modules/pm2/bin/pm2 kill
[Install]
WantedBy=multi-user.target
Target path
/etc/systemd/system/pm2-root.service
Command list
[ 'systemctl enable pm2-root' ]
[PM2] Writing init configuration in /etc/systemd/system/pm2-root.service
[PM2] Making script booting at startup...
[PM2] [-] Executing: systemctl enable pm2-root...
Created symlink from /etc/systemd/system/multi-user.target.wants/pm2-root.service to /etc/systemd/system/pm2-root.service.
[PM2] [v] Command successfully executed.
+---------------------------------------+
[PM2] Freeze a process list on reboot via:
$ pm2 save
[PM2] Remove init script via:
$ pm2 unstartup ubuntu
保存
$ pm2 save
[PM2] Saving current process list...
[PM2] Successfully saved in /root/.pm2/dump.pm2