nodejs使用pm2进行进程管理,自动重启,袒护其它命令行程序

来源:赵克立博客 分类: Nodejs 标签:命令行nodejs发布时间:2017-12-08 11:28:16最后更新:2019-05-20 09:29:44浏览:12472
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。o_0。
更新时间:
2019-05-20 09:29:44
温馨提示:
学无止境,技术类文章有它的时效性,请留意文章更新时间,如发现内容有误请留言指出,防止别人"踩坑",我会及时更新文章

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

image.png

查看运行详细

进程已经运行啦,查看此进程的详细情况用下面命令后面的0就是上面显示的id,也可以使用 php-socket 任务名称在我的系统上面那个id不知道怎么回事显示成一个方框啦,应该是乱码啦

pm2 describe 0

image.png

注意到里面的日志文件有好几个.error肯定是错误日志啦。out的就是命令行里的输出字符都在这里

查看输出日志

pm2 logs 0

主要特性:

  • 内建负载均衡(使用Node cluster 集群模块)

  • 后台运行

  • 0秒停机重载,我理解大概意思是维护升级的时候不需要停机.
    具有Ubuntu和CentOS 的启动脚本

  • 停止不稳定的进程(避免无限循环)

  • 控制台检测

  • 提供 HTTP API

  • 远程控制和实时的接口API ( Nodejs 模块,允许和PM2进程管理器交互 )

  • 测试过Nodejs v0.11 v0.10 v0.8版本,兼容CoffeeScript,基于Linux 和MacOS.


安装

npm install -g pm2

用法

npm install pm2 -g     # 命令行安装 pm2 
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 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

0秒停机重载:

pm2 reload all

这项功能允许你重新载入代码而不用失去请求连接。

注意:
仅能用于web应用
运行于Node 0.11.x版本
运行于 cluster 模式(默认模式)

列出运行中所有任务

pm2 list


列出由pm2管理的所有进程信息,还会显示一个进程会被启动多少次,因为没处理的异常。


pm2 monit


监视每个node进程的CPU和内存的使用情况。


配置说明

  • 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  异常重启情况下,延时重启时间;


参考文献

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

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



微信号:kelicom QQ群:215861553 紧急求助须知
Win32/PHP/JS/Android/Python