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小时的日志
  • 相关阅读:
    python变量和作用域
    模块
    装饰器
    转git取消commit
    RTP
    ffmpeg编译
    win7开启wifi
    LIVE555
    【FFmpeg】ffplay播放rtsp视频流花屏问题
    Windows下编译SDL
  • 原文地址:https://www.cnblogs.com/xingxia/p/pm2.html
Copyright © 2011-2022 走看看