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

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

npm安装

安装)

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"
}]

启动一个django服务

{
"name": "service1",
"script": "/data/www/env/bin/python", # 虚拟环境python路径
"args": [
"manage.py",
"runserver",
"0.0.0.0:8004"
],
"exec_interpreter": "",
"exec_mode": "fork"
}

带有环境变量的django服务:

{
"name": "h5",
"script": "/opt/h5/manage.py",
"args": [
"runserver",
"0.0.0.0:8000",
"--settings=settings.dev"

],
"exec_interpreter": "/opt/h5/env/bin/python",
"exec_mode": "fork",
"error_file": "/opt/h5/logs/h5_err.log",
"out_file": "/opt/h5/logs/h5_out.log",
"env": { }
}

然后cmd到当前目录执行

pm2 start socket.json

启动Vue项目:

pm2 start npm -- run dev

使用配置文件:

{
"name": "router",
"script": "/data/www/router",
"interpreter": "/opt/rh/rh-nodejs12/root/usr/bin/npm",
"interpreter_args": "run build",
"exec_mode": "fork",
"error_file": "./router-err.log",
"out_file": "./router-out.log"
}

  

常用命令:

$ 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小时的日志

设置开机启动:

执行命令:

pm2 startup

最终加入到服务的启动服务中, /etc/systemd/system/pm2-boot.service

保存进程列表
pm2 save 解除开启启动
pm2 unstartup systemd

问题点:

1.使用start启动一个json文件之后,如果文件发生了变化  使之生效 需要执行重载命令

pm2 startOrReload  pm2_server.json

进程管理工具之PM2的更多相关文章

  1. 一文教你如何使用Node进程管理工具-pm2

    pm2 是什么 pm2 是一个守护进程管理工具,它能帮你守护和管理你的应用程序.通常一般会在服务上线的时候使用 pm2 进行管理.pm2 能做的其实有很多,比如监听文件改动自动重启,统一管理多个进程, ...

  2. Linux下取代top的进程管理工具 htop

    一.htop 简介 This is htop, an interactive process viewer for Linux. It is a text-mode application (for ...

  3. Linux进程管理工具——supervisor

    介绍 Supervisord是用Python实现的一款非常实用的进程管理工具 安装 这里用源码 supervisor-.tar.gz .tar.gz cd supervisor- sudo pytho ...

  4. supervisor python开发的进程管理工具

    Supervisor (http://supervisord.org) 是一个用 Python 写的进程管理工具,可以很方便的用来启动.重启.关闭进程(不仅仅是 Python 进程).除了对单个进程的 ...

  5. 进程管理工具htop/glances/dstat的使用

    进程管理工具htop/glances/dstat的使用 Linux中进程的相关知识 1.什么是进程呢? 通俗的来说进程是运行起来的程序.唯一标示进程的是进程描述符(PID). 2.进程的分类 1)根据 ...

  6. supervisor进程管理工具的使用

    supervisor是一款进程管理工具,当想让应用随着开机启动,或者在应用崩溃之后自启动的时候,supervisor就派上了用场. 广泛应用于服务器中,用于引导控制程序的启动 安装好superviso ...

  7. Linux 进程管理工具 supervisord 安装及使用

    Supervisor是用Python实现的一款非常实用的进程管理工具 1.安装过程非常简单 安装python 安装meld3-0.6.8.tar.gz 安装supervisor-3.0a12.tar. ...

  8. Python 进程管理工具 Supervisor 使用教程

    Supervisor 是基于 Python 的进程管理工具,只能运行在 Unix-Like 的系统上,也就是无法运行在 Windows 上.Supervisor 官方版目前只能运行在 Python 2 ...

  9. Linux进程管理工具

    Linux进程管理工具 Htop yum install htop 参考帮助: http://blog.csdn.net/skh2015java/article/details/53173896 Li ...

  10. linux 使用进程管理工具 supervisor

    1.supervisor是使用python进行开发的运行在linux服务器上的进程管理工具 老版本的supervisor需要运行在python2环境,如果需要使用supervisor管理python3 ...

随机推荐

  1. 合合信息旗下启信宝与鹏城实验室达成数据托管合作,“AI靶场”让数据管理更精准

    合合信息旗下启信宝与鹏城实验室达成数据托管合作,"AI靶场"让数据管理更精准   数字经济时代,数据已成为新型生产要素.通过"数据托管"等形式对数据进行集中管理 ...

  2. 通用能力及AI核心能力表现优异!合合信息智能文档处理系统(IDP)高评级通过中国信通院评估

    数字经济快速发展的背后,全球数据总量呈现出爆发式增长趋势.智能文档处理(IDP)技术能够高效地从多格式文档中捕捉.提取和处理数据,帮助机构和企业大幅提升文档处理效率,节约时间和人力成本.近期,合合信息 ...

  3. 工具 – Vite

    前言 一直想 try Vite, 但一直没有机会. 今天突然 Live Server IP Address 手机连不上...也不知道是 Bug 还是怎么回事儿. 总之 IIS IP Address 没 ...

  4. 【赵渝强老师】MongoDB中的索引(上)

    索引是提高查询查询效率最有效的手段.索引是一种特殊的数据结构,索引以易于遍历的形式存储了数据的部分内容(如:一个特定的字段或一组字段值),索引会按一定规则对存储值进行排序,而且索引的存储位置在内存中, ...

  5. 推荐一款轻量级 eBPF 前端工具 ply

    1 Overview ply 是 eBPF 的 front-end 前端工具之一,专为 embedded Linux systems 开发,采用 C 语言编写,只需 libc 和内核支持 BPF 就可 ...

  6. dotnet Core 静态方法和构造方法

    // 静态方法: // 特点:1.生命周期一旦创建-应用结束 才会结束 2.全局的 3.效率高(放在内存中) // 用户:用户登录,系统配置信息,系统设置,SQLHelper // 注意:静态的东西创 ...

  7. GDOI绝望记——人生第一次省选普及

    时光匆匆,如白驹过隙. 转眼之间,我一在OI之路上走了2年半了.. 岁月不饶人,我却在不经意间饶了岁月. 自己到底是不是不如别人,这,是取决于自己的心态吧 Preface 人生中第一次去深圳(应该是吧 ...

  8. Tomcat通信概念篇

    在上一篇了解完网络通信的基本概念之后,本章节为了解Tomcat的基本逻辑方便以后对 UDP:(发短信,不管是否能接受成功都会发送) //发送端 //不需要连接服务器 public static voi ...

  9. 快速搭建hadoop,zk,hbase的基础集群

    1. ZK集群,Hadoop集群,Hbase集群安装 Linux121 Linux122 Linux123 Hadoop MySQL ZK HBASE 1.1 安装Vmware,安装虚拟机集群 1.1 ...

  10. python使用协程完成批量模拟支付

    import asyncio import sys from queue import Queue sys.path.append("../") # from tool.__ini ...