PM2 是一个守护进程管理器,它将帮助您管理和保持您的应用程序在线。PM2 入门很简单,它以简单直观的 CLI 形式提供,可通过 NPM 安装。
安装
最新的 PM2 版本可通过 NPM 或 Yarn 安装:
Shell
- $ npm install pm2@latest -g
- # or
- $ yarn global add pm2
启动应用程序
启动、守护和监控应用程序的最简单方法是使用以下命令行:
Shell
- $ pm2 start app.js
或快速启动任何其他应用程序:
Shell
- $ pm2 start bashscript.sh
- $ pm2 start python-app.py --watch
- $ pm2 start binary-file -- --port 1520
也可以设置一些命令行参数:
Shell
- # 指定一个应用程序的名称
- --name <app_name>
- # 监听并在文件变化时重启应用程序
- --watch
- # 设置应用重载的内存阈值
- --max-memory-restart <200MB>
- # 指定日志文件
- --log <log_path>
- # 向脚本传递额外的参数
- -- arg1 arg2 arg3
- # 自动重启之间的延迟
- --restart-delay <delay in ms>
- # 在日志中加入时间前缀
- --time
- # 不自动重启应用程序
- --no-autorestart
- # 指定强制重启的任务(cron)
- --cron <cron_pattern>
- # 附加到应用程序日志
- --no-daemon
复制 文本
管理应用
管理应用程序状态很简单,命令如下:
Shell
- $ pm2 restart app_name
- $ pm2 reload app_name
- $ pm2 stop app_name
- $ pm2 delete app_name
复制 文本
app_name
不是必须的,你也可以通过:all
对所有进程操作,id
作用于特定的进程 ID。
列出托管应用程序
列出 PM2 管理的所有应用程序的状态:
Shell
- $ pm2 [list|ls|status]
PM2
显示日志
实时显示日志:
Shell
- $ pm2 logs
显示指定多少行日志:
Shell
- $ pm2 logs --lines 200
基于终端的仪表板显示
这是一个直接适合终端的实时仪表板:
Shell
- $ pm2 monit
pm2.io:监控和诊断 Web 界面
基于 Web 的仪表板,带有诊断系统的跨服务器:
Shell
- $ pm2 plus
集群模式
对于 Node.js 应用程序,PM2 包含一个自动负载均衡器,它将在每个衍生进程之间共享所有 HTTP[s]/Websocket/TCP/UDP 连接。
以集群模式启动应用程序:
Shell
- $ pm2 start app.js -i max
查看更多关于集群模式相关信息:https://pm2.keymetrics.io/docs/usage/cluster-mode/
你也可以创建一个配置文件,名为Ecosystem的文件,来管理多个应用程序。生成一个Ecosystem文件:
Shell
- $ pm2 ecosystem
执行命令后将生成 ecosystem.config.js 文件
Source Code
- module.exports = {
- apps : [{
- name: "app",
- script: "./app.js",
- env: {
- NODE_ENV: "development",
- },
- env_production: {
- NODE_ENV: "production",
- }
- }, {
- name: 'worker',
- script: 'worker.js'
- }]
- }
复制 文本
使用以下命令就可以快速启动它:
Shell
- $ pm2 start ecosystem.config.js
设置开机启动脚本
使用您在服务器启动/重新启动时管理的进程重新启动 PM2 至关重要。要解决此问题,只需运行此命令以生成开机自启动脚本:
Shell
- $ pm2 startup
保存:
Shell
- $ pm2 save
更新 PM2
更新很简单,版本之间变动也不是很大:
Shell
- $ npm install pm2@latest -g
然后运行:
Shell
- $ pm2 update
命令备忘清单
Shell
- # 普通模式
- pm2 start app.js --name my-api # 教程名称
- # 集群模式
- pm2 start app.js -i 0 # 将根据可用的CPU,用LB启动最大的进程
- pm2 start app.js -i max # 与上述相同,但已废弃。
- pm2 scale app +3 # 将 "应用程序 "扩大到3个
- pm2 scale app 2 # 将 "应用程序 "扩大或缩小到2个工作者总数
- #列表
- pm2 list # 显示所有进程的状态
- pm2 jlist # 以原始JSON格式打印进程列表
- pm2 prettylist # 以美化的JSON格式打印进程列表
- pm2 describe 0 # 显示关于特定进程的所有信息process
- pm2 monit # 监控所有进程
- # 日志
- pm2 logs [--raw] # 以流式方式显示所有进程的日志
- pm2 flush # 清空所有日志文件
- pm2 reloadLogs # 重新加载所有日志
- # 动作
- pm2 stop all # 停止所有进程
- pm2 restart all # 重新启动所有进程
- pm2 reload all # 将0s停机时间重新加载(针对网络应用)
- pm2 stop 0 # 停止特定的进程ID
- pm2 restart 0 # 重新启动特定的进程ID
- pm2 delete 0 # 将从pm2列表中删除进程
- pm2 delete all # 将从pm2列表中删除所有进程
- # 杂项
- pm2 reset <process> # 重置元数据(重启时间...)
- pm2 updatePM2 # 更新内存中的pm2
- pm2 ping # 确保pm2守护进程已被启动
- pm2 sendSignal SIGUSR2 my-app # 发送系统信号给脚本
- pm2 start app.js --no-daemon
- pm2 start app.js --no-vizion
- pm2 start app.js --no-autorestart