zoukankan      html  css  js  c++  java
  • 进程管理工具之PM2

    Github地址 https://github.com/Unitech/pm2

    官方文档 http://pm2.keymetrics.io/docs/usage/quick-start/

    安装)

    npm install -g pm2

    pm2是守护nodejs进程后台运行的,异常停止后可以自动重启,并且也可以袒护其它第三方的命令行程序,比如php的命令行

    {
      "name": "应用进程名称",
      "args": "传递给脚本的参数",
      "script": "启动的脚本路径",
      "exec_interpreter": "指定的脚本解释器",
      "exec_mode": "fork",
      "max_memory_restart": "100M",
      //其它参数
      "watch": [  // 监控变化的目录,一旦变化,自动重启
        "bin",
        "routers"
      ],
      "ignore_watch" : [  // 从监控目录中排除
        "node_modules", 
        "logs",
        "public"
      ],
      "watch_options": {
        "followSymlinks": false
      },
      "error_file" : "./logs/app-err.log",  // 错误日志路径
      "out_file"   : "./logs/app-out.log",  // 普通日志路径
      "env": {
          "NODE_ENV": "production"  // 环境参数,当前指定为生产环境
      }
    }
    • name 脚本显示名称

    • args 脚本参数

    • script 脚本文件名称

    • exec_interpreter 使用的解析器

    • exec_mode 启动模式,fork为使用子进程启动,cluster 使用nodejs的cluster模块启动

    • max_memory_restart 进程占用内存超过时自动重启

    使用示例

    后台运行一个php的socket程序,需要一直运行,所以需要使用pm2来守护进程

    创建一个socket.json的配置文件,里面是数组格式可以启动多个

    [{
      "name": "php-socket",
      "args": "",
      "script": "./include/Socket.php",
      "exec_interpreter": "php.exe",
      "exec_mode": "fork",
      "max_memory_restart": "100M"
    }]

    然后cmd到当前目录执行

    pm2 start socket.json

    常用命令:

    $ pm2 start app.js -i 4 #后台运行pm2,启动4个app.js 
                                    # 也可以把'max' 参数传递给 start
                                    # 正确的进程数目依赖于Cpu的核心数目
    $ pm2 start app.js --name my-api # 命名进程
    $ pm2 list               # 显示所有进程状态
    $ pm2 monit              # 监视所有进程
    $ pm2 logs               #  显示所有进程日志
    $ pm2 stop all           # 停止所有进程
    $ pm2 restart all        # 重启所有进程
    $ pm2 reload all         # 0秒停机重载进程 (用于 NETWORKED 进程)
    $ pm2 stop 0             # 停止指定的进程
    $ pm2 restart 0          # 重启指定的进程
    $ pm2 startup            # 产生 init 脚本 保持进程活着(pm2 开机启动)
    $ pm2 web                # 运行健壮的 computer API endpoint
    $ pm2 delete 0           # 杀死指定的进程
    $ pm2 delete all         # 杀死全部进程
    
    运行进程的不同方式:
    $ pm2 start app.js -i max  # 根据有效CPU数目启动最大进程数目
    $ pm2 start app.js -i 3      # 启动3个进程
    $ pm2 start app.js -x        #用fork模式启动 app.js 而不是使用 cluster
    $ pm2 start app.js -x -- -a 23   # 用fork模式启动 app.js 并且传递参数 (-a 23)
    $ pm2 start app.js --name serverone  # 启动一个进程并把它命名为 serverone
    $ pm2 stop serverone       # 停止 serverone 进程
    $ pm2 start app.json        # 启动进程, 在 app.json里设置选项
    $ pm2 start app.js -i max -- -a 23                   #在--之后给 app.js 传递参数
    $ pm2 start app.js -i max -e err.log -o out.log  # 启动 并 生成一个配置文件
    你也可以执行用其他语言编写的app  ( fork 模式):
    $ pm2 start my-bash-script.sh    -x --interpreter bash
    $ pm2 start my-python-script.py -x --interpreter python

    清除(pm2 flush)与重载日志(pm2 reloadLogs

    配置说明:

    name  应用名称;
    
    script  启动脚本路径;
    
    cwd  应用启动的路径;
    
    args  传递给脚本的参数;
    
    interpreter  指定的脚本解释器;
    
    interpreter_args  传递给解释器的参数;
    
    instances  应用启动实例个数,仅在cluster模式有效,默认为fork;
    
    exec_mode  应用启动模式,支持fork和cluster模式;
    
    watch  监听重启,启用情况下,文件夹或子文件夹下变化应用自动重启;
    
    ignore_watch  忽略监听的文件夹,支持正则表达式;
    
    max_memory_restart  最大内存限制数,超出自动重启;
    
    env  环境变量,object类型,如{"NODE_ENV":"production", "ID": "42"};
    
    log_date_format  指定日志日期格式,如YYYY-MM-DD HH:mm:ss;
    
    error_file  记录标准错误流,$HOME/.pm2/logs/XXXerr.log),代码错误可在此文件查找;
    
    out_file  记录标准输出流,$HOME/.pm2/logs/XXXout.log),如应用打印大量的标准输出,会导致pm2日志过大;
    
    min_uptime  应用运行少于时间被认为是异常启动;
    
    max_restarts  最大异常重启次数,即小于min_uptime运行时间重启次数;
    
    autorestart  默认为true, 发生异常的情况下自动重启;
    
    cron_restart  crontab时间格式重启应用,目前只支持cluster模式;
    
    force  默认false,如果true,可以重复启动一个脚本。pm2不建议这么做;
    
    restart_delay  异常重启情况下,延时重启时间;

    日志管理:

    pm2 install pm2-logrotate

    使用pm2-logrotate进行日志管理使得我们的node服务的log以及pm2的log能够得到控制,防止log过多导致把磁盘刷爆。pm2-logrotate

     pm2 set pm2-logrotate:rotateInterval '0 0 */1 * *'     //每天零点备份
     pm2 set pm2-logrotate:compress true    //压缩
     pm2 set pm2-logrotate:retain 3  //备份最多3份,也就是备份最进3小时的日志
  • 相关阅读:
    UVA 10618 Tango Tango Insurrection
    UVA 10118 Free Candies
    HDU 1024 Max Sum Plus Plus
    POJ 1984 Navigation Nightmare
    CODEVS 3546 矩阵链乘法
    UVA 1625 Color Length
    UVA 1347 Tour
    UVA 437 The Tower of Babylon
    UVA 1622 Robot
    UVA127-"Accordian" Patience(模拟)
  • 原文地址:https://www.cnblogs.com/xingxia/p/pm2.html
Copyright © 2011-2022 走看看