PM2 - Quick Start

9 篇文章 0 订阅

前言

PM2是一个针对node应用的进程管理器。保持应用永远处于活动状态,无停机重新加载,以及常见的系统管理任务。

github官方地址

支持系统:Linux, MacOSx, Windows

Quick Start

安装

npm install pm2 -g

启动应用程序

切换到应用程序的工程目录

pm2 start app.js

这里写图片描述

常用命令

# General
$ npm install pm2 -g            # pm2安装
$ pm2 start app.js              # 启动应用(node方式)
$ pm2 start app.py              # 启动应用(pythos方式)
$ pm2 start npm -- start        # 启动Node应用

# Cluster Mode (Node.js only)
$ pm2 start app.js -i 4         # 在集群模式下启动4个实例
                                # it will load balance network queries to each app
$ pm2 reload all                # 0秒重启所有应用
$ pm2 gracefulReload all # Send exit message then reload (for networked apps)
$ pm2 scale [app-name] 10       # 将指定app扩展或缩小到10个进程

# Process Monitoring
$ pm2 list                      # 列出通过pm2启动的所有应用
$ pm2 jlist                        # 列出应用列表以原生json方式
$ pm2 prettylist                # 列出应用列表以美化了的json方式(格式化,还没有验证)
$ pm2 monit                     # 列出每个应用的内存和CPU使用情况
$ pm2 show|describe [app-name]  # 列出指定应用程序的所有信息

# Log management
$ pm2 logs                      # 显示所有app的log
$ pm2 logs [app-name]           # 显示指定app的log
$ pm2 logs --json               # 以json显示显示log
$ pm2 flush                        # 清空所有的log文件内容
$ pm2 reloadLogs               # 重新加载所有的log
$ pm2 start app.js -e err.log -o out.log  # Start and specify error and out log

# Process State Management
$ pm2 start app.js --name="api" # 启动一个应用,并且命名为api
$ pm2 start app.js -- -a 34     # 启动应用,参数为"-a 34"
$ pm2 start app.js --node-args="--debug=7001" # 针对node V8给出指定参数
$ pm2 start app.js --log-date-format "YYYY-MM-DD HH:mm Z"    # log前面会带以指定时间格式化前缀
$ pm2 start app.js --watch      # 启动应用,并添加watch功能
$ pm2 start script.sh           # 启动script.sh文件
$ pm2 start app.json            # 启动在app.json中配置的所有文件
$ pm2 reset [app-name]          # Reset all counters
$ pm2 stop all                  # 停止所有app
$ pm2 stop 0                    # 停止指定id的app
$ pm2 restart all               # 重启所有app
$ pm2 gracefulReload all        # 在集群cluster模式下重新加载所有app
$ pm2 delete all                # 销毁并删除所有app
$ pm2 delete 0                  # 删除id是0的app

# Startup/Boot management
$ pm2 startup                   # 在启动时,检测系统初始化,生成和配置pm2 boot
$ pm2 save                      # 保存当前进程列表
$ pm2 resurrect                 # 恢复以前保存的进程
$ pm2 unstartup                 # 禁用和删除启动系统

$ pm2 update                    # pm2更新
$ pm2 generate                  # 生成一个简单的json配置文件(app相关配置)

# 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     # Install module (here a log rotation system)
$ pm2 uninstall pm2-logrotate   # Uninstall module
$ pm2 publish                   # Increment version, git push and npm publish

参数 Options

   -h, --help                           输出使用信息
   -V, --version                        输出版本号
   -v --version                         获取版本号
   -s --silent                          隐藏所有信息
   -m --mini-list                       display a compacted list without formatting 显示未格式化的压缩列表
   -f --force                           强制操作
   -n --name <name>                     set a <name> for script 为脚本设置名称
   -i --instances <number>              launch [number] instances (for networked app)(load balanced) 指定启动多少实例
   -l --log [path]                      指定日志文件路径 (error and out are both included)
   -o --output <path>                   指定输出日志文件路径
   -e --error <path>                    指定错误日志文件路径
   -p --pid <pid>                       specify pid file 指定pid文件
   --max-memory-restart <memory>        specify max memory amount used to autorestart (in megaoctets) 指定用于自动启动的最大内存量
   --env <environment_name>             specify environment to get specific env variables (for JSON declaration) 指定环境
   -x --execute-command                 execute a program using fork system 使用fork系统执行程序
   -u --user <username>                 define user when generating startup script 在生成启动脚本时定义用户
   -c --cron <cron_pattern>             restart a running process based on a cron pattern 基于cron模式重启正在运行的程序
   -w --write                           write configuration in local folder 在本地文件夹中写入配置
   --interpreter <interpreter>          the interpreter pm2 should use for executing app (bash, python...) 执行app,pm2使用的翻译者
   --log-date-format <momentjs format>  add custom prefix timestamp to logs 将自定义的时间戳前缀添加到log文件中去
   --no-daemon                          run pm2 daemon in the foreground if it doesn't exist already
   --merge-logs                         merge logs from different instances but keep error and out separated 从不同实例合并日志,但保持错误和输出分离
   --watch                              watch application folder for changes 监听应用程序文件的改变
   --ignore-watch <folders|files>       folder/files to be ignored watching, chould be a specific name or regex - e.g. --ignore-watch="test node_modules "some scripts"" 忽略指定的文件或文件夹的监听
   --node-args <node_args>              space delimited arguments to pass to node in cluster mode - e.g. --node-args="--debug=7001 --trace-deprecation" 指定node参数
   --no-color                           skip colors
   --no-vizion                          skip vizion features (versioning control)
   --no-autorestart                     do not automatically restart apps 不会自动重启app

应用程序声明

你可以创建配置文件来管理多个应用程序。

pm2 ecosystem

生成一个简单的配置,ecosystem.config.js。具体说明

然后你就可以轻松的管理你的应用

# 启动所有应用
$ pm2 start ecosystem.config.js

# 只开始名为worker-app的应用
$ pm2 start ecosystem.config.js --only worker-app

# 停止所有应用
$ pm2 stop ecosystem.config.js

# 重启所有应用
$ pm2 start   ecosystem.config.js
## Or
$ pm2 restart ecosystem.config.js

# 重新加载所有应用
$ pm2 reload ecosystem.config.js

# 删除所有应用
$ pm2 delete ecosystem.config.js

# 启动应用并指定环境
$ pm2 start ecosystem.config.js --env [environment_name]

# 默认情况下,pm2启动后,环境是不变的,除非你告诉pm2要更新配置。所以使用--update-env选项。请注意一些选项将不被更新
$ pm2 restart|start|reload ecosystem.config.js --update-env

注意: 此处“所有”都是ecosystem.config.js中指定的

更新pm2

  • 安装最新的pm2版本
$ npm install pm2@latest -g
  • 然后更新内存中的pm2
$ pm2 update

Process Management

Managing applications states

pm2是一个进程管理器。它管理你的app状态,所以你可以启动,停止,重启以及删除进程。

  • 启动一个应用程序:
$ pm2 start app.js --name "my-api"
$ pm2 start web.js --name "web-interface"
  • 停止web-interface
$ pm2 stop web-interface
  • 重启
$ pm2 restart web-interface

NB: starting PM2 2.1.x, restarts are immutable, meaning that environnement changes will not change your process, see –update-env

  • 删除指定的app从pm2进程列表中
$ pm2 delete web-interface

从pm2 2.4.0开始,你可以restart/delete/stop/reload app通过正则表达式。比如:你想restart http-1和http-2,但不包括http-3

$ pm2 restart /http-[1,2]/

注意:正则表达式通过’/’来指定开始和结束,仅仅指定一个app的name,不包括process id

Process listing

  • 列出所有正在运行的程序
$ pm2 list
# Or
$ pm2 [list|ls|l|status]
  • 获取更多的信息,关于一个指定的进程
$ pm2 show 0

Start any process type

  • 用其他语言启动脚本
$ pm2 start echo.pl --interpreter=perl

$ pm2 start echo.coffee
$ pm2 start echo.php
$ pm2 start echo.py
$ pm2 start echo.sh
$ pm2 start echo.rb
  • 默认的解析器列表
{
  ".sh": "bash",
  ".py": "python",
  ".rb": "ruby",
  ".coffee" : "coffee",
  ".php": "php",
  ".pl" : "perl",
  ".js" : "node"
}

Binary code execution

二进制代码执行

$ pm2 start ./binary-app

Process configuration

运行一个非JS解释器必须设置exec_mode为fork_mode和exec_interpreter为你所选择的翻译器。例如:

{
  "apps" : [{
    "name"       : "bash-worker",
    "script"     : "./a-bash-script",
    "exec_interpreter": "bash",
    "exec_mode"  : "fork_mode"
  }, {
    "name"       : "ruby-worker",
    "script"     : "./some-ruby-script",
    "exec_interpreter": "ruby",
    "exec_mode"  : "fork_mode"
  }]
}

Max Memory Restart

pm2允许基于一定内存限制重启app.

请注意,最大内存重新启动项是优雅的(graceful ,找不到合适的翻译)

CLI

$ pm2 start big-array.js --max-memory-restart 20M

JSON

{
  "name"   : "max_mem",
  "script" : "big-array.js",
  "max_memory_restart" : "20M"
}

Programmatic

pm2.start({
  name               : "max_mem",
  script             : "big-array.js",
  max_memory_restart : "20M"
}, function(err, proc) {
  // Processing
});

Units

单位可以是 K(ilobyte), M(egabyte), G(igabyte).

50M
50K
1G
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值