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. linux 上抓包

    #tcpdump -i mgmt0 -nn -s0 -v port 8001 capture IPv6 ping packets #tcpdump ip6 -i nic0 -nn -s0 and ic ...

  2. WiFi基础(四):WiFi工作原理及WiFi接入过程

    liwen01 2024.09.16 前言 802.11 无线 WiFi 网有三类帧:数据帧.管理帧.控制帧.与有线网相比,无线 WiFi 网会复杂很多.大部分应用软件开发对 WiFi 的控制帧和管理 ...

  3. SpringMVC——SSM整合——表现层数据封装

    表现层数据封装 设置统一数据返回结果类 注意:Result类中的字段并不是固定的,可以根据需要自行增减提供若干个构造方法,方便操作 返回结果类 package com.cqupt.controller ...

  4. o1 式开源推理链项目 g1:可基于 Llama 3.2-90b 模型

    g1 简介 g1 是一个开源项目,利用 Llama 3.1 70b 模型在 Groq 硬件上实现类似 OpenAI o1 的推理链能力.项目通过精心设计的提示策略引导语言模型进行逐步推理,解决了传统语 ...

  5. Android Perfetto 系列 1:Perfetto 工具简介

    2019 年开始写 Systrace 系列,陆陆续续写了 20 多篇,从基本使用到各个模块在 Systrace 上的呈现,再到启动速度.流畅性等实战,基本上可以满足初级系统开发者和 App 开发者对于 ...

  6. CPU缓存伪共享

    CPU缓存什么东西?当然这个问题很多人有可能觉得比较傻,CPU缓存什么,肯定是缓存数据(代码)啊,要不然还能缓存啥,这个确实没问题,但是CPU到底缓存什么样的数据呢?因为对CPU来说,无论是指令,还是 ...

  7. uprobe的使用浅析

    uprobe是linux内核提供的一种trace用户态函数的机制 可以在不对二进制重新编译的情况下进行trace特定函数 本文描述了uprobe的基本使用方法 使用方法 官方的指引是这样的, 详细的可 ...

  8. 【异常处理】Assistive Technology not found: com.sun.java.accessibility.AccessBridge

    十一回来之后,工作电脑上的抓包工具Charles突然启动不起来了,双击图标后,一闪而过,就没动静了. 不知道是不是因为之前安装了什么工具.软件引起的. 打开CMD命令行,跳转到目录下启动,提示:Ass ...

  9. 祝贺开源之夏 2023 KubeSphere 社区项目中选学生!

    日前,开源之夏 2023 所有中选结果已出炉,在此祝贺各位中选的同学! 活动简介 开源之夏是由中科院软件所"开源软件供应链点亮计划"发起并长期支持的一项暑期开源活动,旨在鼓励在校学 ...

  10. 狂神说-Docker基础-学习笔记-02 Docker常用命令

    狂神说-Docker基础-学习笔记-02 Docker常用命令 1.帮助命令 docker version #查看版本信息 docker info #显示docker的系统信息 docker `命令` ...