6

今天实现了一个用node写了一个小网页放在服务器,为了解决关闭连接后退出node的执行,找了forrver和pm2,权衡之下,选择了pm2。npm上找到了其文档,简单翻译一下,留备后用。
奈何我作为一个英语四级都没有过的学渣,翻译水平实在有限,有疏漏不通之处,往大家谅解。(其实我就当做一个学习英语的方式了)

文档地址

PM2是一个带有负载均衡功能的Node应用的进程管理器。它可以保持Node应用一直后台运行,在不停止的前提下更新,优化了系统任务管理。
启动进程管理十分简单:

$ pm2 start app.js

PM2经过了超过1000次的测试。
并且能够运行在linux&MacOSx&Windows等操作系统上。

pm2.png

Install PM2

$ npm install pm2 -g

当你安装了node之后,npm也会被安装--Installing Node.js with NVM
NVM是一个Nodejs的版本控制器。

启动一个应用

$ npm install pm2 -g

你的程序现在是一个受监控的后台进程,并且会一直运行下去。
More about Process Management

Update PM2

# Install latest pm2 version

$ npm install pm2 -g
# Save process list, exit old PM2 & restore all processes
$ pm2 update

PM2更新是无缝的

主要特点

命令概述

# General

$ npm install pm2 -g           # 安装 PM2

$ pm2 start app.js             #启动, Daemonize and auto-restart application (Node)

$ pm2 start app.py             # 启动, Daemonize and auto-restart application (Python)

$ pm2 start npm -- start       # 启动, Daemonize and auto-restart Node application

 
# Cluster Mode (Node.js only)
$ pm2 start app.js -i 4         # 启动四个应用程序实例

                               # 会给每个网络装载网络均衡器

$ pm2 reload all               # 立即重启所有工作进程

$ pm2 scale [app-name] 10       # 使用10个工作进程

 
# Process Monitoring
$ pm2 list                     # 列出所有PM2启动的进程

$ pm2 monit                     # 列出每个程序的详细情况和CPU使用情况

$ pm2 show [app-name]           # 列出程序的所有信息

 
# Log management
$ pm2 logs                     # 列出应用的日志

$ pm2 logs [app-name]           # 列出某个app的日志

$ pm2 logs --json               # 使用json格式列出日志

$ pm2 flush
$ pm2 reloadLogs
 
# Process State Management
$ pm2 start app.js --name="api" # 启动应用,并且命名‘api’

$ pm2 start app.js -- -a 34     # Start app and pass option "-a 34" as argument
$ pm2 start app.js --watch     # 当文件改变的时候重新启动应用

$ pm2 start script.sh           # 启动bash脚本

$ pm2 start app.json           # 启动所有app.json中声明的程序

$ pm2 reset [app-name]         # Reset all counters

$ pm2 stop all                 # 停止所有应用

$ pm2 stop 0                   # 停止id为0的进程

$ pm2 restart all               # 重启所有应用

$ pm2 gracefulReload all       # Graceful reload all apps in cluster mode
$ pm2 delete all               # 关闭并删除所有应用

$ pm2 delete 0                 # 删除id为0的程序

 
# Startup/Boot management
$ pm2 startup                   # Detect init system, generate and configure pm2 boot on startup
$ pm2 save                     # Save current process list
$ pm2 resurrect                 # Restore previously save processes
$ pm2 unstartup                 # Disable and remove startup system
 
$ pm2 update                   # Save processes, kill PM2 and restore processes
$ pm2 generate                 # Generate a sample json configuration file
 
# Deployment
$ pm2 deploy app.json prod setup   # Setup "prod" remote server
$ pm2 deploy app.json prod         # Update "prod" remote server
$ pm2 deploy app.json prod revert 2 # Revert "prod" remote server by 2
 
# Module system
$ pm2 module:generate [name]   # Generate sample module with name [name]

$ pm2 install pm2-logrotate     # 安装模块 (here a log rotation system)

$ pm2 uninstall pm2-logrotate   # 卸载模块

$ pm2 publish                   # 版本发布, git推送和npm发布

进程管理器

一点进程启动,你可以查看列表并且轻松的管理:

pm2-list.png

监听所有运行的进程

$ pm2 list

管理进程很简洁:

$ pm2 stop     <app_name|id|'all'|json_conf>
$ pm2 restart <app_name|id|'all'|json_conf>
$ pm2 delete   <app_name|id|'all'|json_conf>

查看更多的进程信息:

$ pm2 describe <id|app_name>

More about Process Management

负载平衡和立即重载

当启动应用的时候使用 -i <instance_number>选项,集群模式将会启用。集群模式将会instance_number然后自动加载 HTTP/TCP/UDP 的均衡器。可以根据CPU可获得数目在增加性能。
PM2支持所有的Nodejs框架,并且任何Node.js程序不用修改任何代码即能运行

cluster-support.png

主要命令:

$ pm2 start app.js -i max # Enable load-balancer and start 'max' instances (cpu nb)
$ pm2 reload all           # Zero second dowtime reload
$ pm2 scale <app_name> <instance_number> # Increase / Decrease process number

More informations about how PM2 make clustering easy

CPU/内存监控

pm2-monit.png

监视所有进程:

$ pm2 monit

日志工具

pm2-logs.png

即时地展示详细的进程日志。有 Standard, Raw, JSON和formated
输出可以使用:

$ pm2 logs ['all'|app_name|app_id] [--json] [--format] [--raw]`

例子:

$ pm2 logs APP-NAME       # Display APP-NAME logs
$ pm2 logs --json         # JSON output
$ pm2 logs --format       # Formated output 
$ pm2 flush               # Flush all logs
$ pm2 reloadLogs         # Reload all logs

More about log management

配置启动脚本

PM2可以配置启动脚本,在每一次系统重启的时候,保持PM2和进程的运行。
支持的系统:systemd (Ubuntu 16, CentOS, Arch), upstart (Ubuntu 14/12), launchd (MacOSx, Darwin), rc.d (FreeBSD).

# Auto detect init system + generate and setup PM2 boot at server startup

$ pm2 startup

# Manually specify the startup system
# Can be: systemd, upstart, launchd, rcd
$ pm2 startup [platform]
 
# Disable and remove PM2 boot at server startup
$ pm2 unstartup

再重启的时候,保存进程列表:

pm2 save

More about startup scripts

模块系统

PM2内置了一个简单却强大的模块系统,安装模块十分简单:

$ pm2 install <module_name>

这里有一些兼容的模块,能够通过PM2管理Nodejs库:
pm2-logrotate 自动记录PM2和程序的管理日志
pm2-webshell 提供一个终端
pm2-server-monit 监控系统运行
Writing your own module

Keymetrics monitoring

application-demo.png

如果你使用PM2管理Nodejs应用,Keymetrics会使你管理简单,并且可以是跨服务器。
Discover the monitoring dashboard for PM2
十分感谢,希望您能喜欢PM2

More about PM2

Application Declaration via JS files

Watch & Restart

PM2 API

Deployment workflow

PM2 on Heroku/Azure/App Engine

PM2 auto completion

Using PM2 in ElasticBeanStalk

CHANGELOG

CHANGELOG

Contributors

Contributors

注:

翻译水平较低,而且使用的并不深入。随着以后理解的加深,再逐渐修改翻译文档。


NikoManiac
240 声望6 粉丝

2018,厚积才能爆发。