安装
1 | npm install pm2 -g |
升级
1 | npm install pm2@latest -g |
启动应用
1 | pm2 start <app_name|id|all> #可以指定应用名称pm2 start app,js --name=test |
传递参数
1 | pm2 start app.js -- -p 8080 |
命名应用
1 | NODE_ENV=production pm2 start index.js -n Ghost |
生成服务器脚本
1 | pm2 startup <ubuntu|centos|gentoo|systemd> #产生init脚本,保持进程活着 |
查看信息
1 | pm2 list # 显示所有进程状态 |
运行控制
1 | pm2 stop 0 # 停止指定进程 |
代码监控
1 | pm2 start app.js --watch # 代码修改自动重启 |
运行监测
1 | pm2 monit # Monitor all processes |
日志
1 | pm2 logs # 显示所有进程日志 |
杂项
1 | pm2 ping # Ensure pm2 daemon has been launched |
设置开机自启动
使用 pm2 启动 node
1 | pm2 start /home/wwwroot/web.js --watch |
dump 这些进程列表
1 | pm2 save |
生成自启动脚本
1 | pm2 startup centos |
赋予权限
1 | chmod +x /etc/init.d/pm2-init.sh |
添加服务
1 | chkconfig --add [pm2-init.sh](http://pm2-init.sh/) |
注意点
注意点一
保证你的 pm2 启动的目录不能在停止 pm2 前被删除,否则将会导致往后的 pm2 因为找不到执行路径产生 ERROR,停止运行。
如何查看 pm2 应用的执行路径:执行 ps ax | grep pm2
,在执行结果中寻在 pm2 进程 PID,执行 ls -l /proc/PM2_PID/cwd
,可以查看到该进程的执行路径。
注意点二
执行大部分的 pm2 指令将会初始化 pm2,pm2
和 pm2 kill
除外,在非目标的路径下执行 pm2 指令时千万要注意,pm2 的 God Daemon 可能已经被启动。如:PM2 Successfully daemonized
1 | ➜ _drafts git:(master) ✗ pm2 --help |
注意点三
使用 pm2 的 ecosystem.json 配置来启动你的 pm2 程序,简单的配置让启动过程更加清晰,从而提高你的工作效率。
在项目根路径执行 pm2 ecosystem
,会生成一个 ecosystem.json 文件。
例如:
1 | module.exports = { |
apps
字段中的每一个配置都对应一个 pm2 app,你可以使用 pm2 startOrRestart ecosystem.json
来启动所有应用,使用 pm2 startOrRestart ecosystem.json --only
API 只启动 API 这个应用。
注意到,我在 apps
字段中增加了一个配置 cwd: "/opt/someProject/server"
,这个配置对应了该应用的代码执行路径,换而言之,当我们在程序中执行 process.cwd()
时,返回的就是这个 /opt/someProject/server
路径。因此,我们可以把 /opt
路径当作 pm2 的启动路径,从而管理多个项目服务进程。
在 pm2 的文档中也有类似的文档:Capistrano like deployments。
注意点四
完全关闭 pm2 的方法是 pm2 kill
,使用 pm2 delete someApp
只能关闭所有的 pm2 应用,而不能关闭 pm2。
使用 ps ax | grep pm2
、 ps ax | grep PM2
、ps ax | grep God Daemon
来确定是否完全关闭了 pm2。
注意点五
pm2 gracefulReload ecosystem.config.js --env production
doesn’t pick up new settings if I have changed something in theecosystem.config.js
在更改了ecosystem.config.js
配置之后,执行pm2 gracefulReload ecosystem.config.js
并不会更新新配置,需要先执行pm2 kill
。