进程管理工具之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"
}]
启动一个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的更多相关文章
- 一文教你如何使用Node进程管理工具-pm2
pm2 是什么 pm2 是一个守护进程管理工具,它能帮你守护和管理你的应用程序.通常一般会在服务上线的时候使用 pm2 进行管理.pm2 能做的其实有很多,比如监听文件改动自动重启,统一管理多个进程, ...
- Linux下取代top的进程管理工具 htop
一.htop 简介 This is htop, an interactive process viewer for Linux. It is a text-mode application (for ...
- Linux进程管理工具——supervisor
介绍 Supervisord是用Python实现的一款非常实用的进程管理工具 安装 这里用源码 supervisor-.tar.gz .tar.gz cd supervisor- sudo pytho ...
- supervisor python开发的进程管理工具
Supervisor (http://supervisord.org) 是一个用 Python 写的进程管理工具,可以很方便的用来启动.重启.关闭进程(不仅仅是 Python 进程).除了对单个进程的 ...
- 进程管理工具htop/glances/dstat的使用
进程管理工具htop/glances/dstat的使用 Linux中进程的相关知识 1.什么是进程呢? 通俗的来说进程是运行起来的程序.唯一标示进程的是进程描述符(PID). 2.进程的分类 1)根据 ...
- supervisor进程管理工具的使用
supervisor是一款进程管理工具,当想让应用随着开机启动,或者在应用崩溃之后自启动的时候,supervisor就派上了用场. 广泛应用于服务器中,用于引导控制程序的启动 安装好superviso ...
- Linux 进程管理工具 supervisord 安装及使用
Supervisor是用Python实现的一款非常实用的进程管理工具 1.安装过程非常简单 安装python 安装meld3-0.6.8.tar.gz 安装supervisor-3.0a12.tar. ...
- Python 进程管理工具 Supervisor 使用教程
Supervisor 是基于 Python 的进程管理工具,只能运行在 Unix-Like 的系统上,也就是无法运行在 Windows 上.Supervisor 官方版目前只能运行在 Python 2 ...
- Linux进程管理工具
Linux进程管理工具 Htop yum install htop 参考帮助: http://blog.csdn.net/skh2015java/article/details/53173896 Li ...
- linux 使用进程管理工具 supervisor
1.supervisor是使用python进行开发的运行在linux服务器上的进程管理工具 老版本的supervisor需要运行在python2环境,如果需要使用supervisor管理python3 ...
随机推荐
- AI 视觉的应用|ZegoAvatar ⾯部表情随动技术解析
一.AI"卷"进实时互动 2021年,元宇宙概念席卷全球,国内各大厂加速赛道布局,通过元宇宙为不同的应用场景的相关内容生态进行赋能.针对"身份"." ...
- 一文了解svg之stroke属性
属性 stroke-width SVG具有stroke-width定义笔触宽度的CSS属性. <svg width="500" height="120"& ...
- OData – 基础语法 Basic
前言 有时候太久没有写真的会忘记,官网又太罗里吧嗦,还是写一篇帮助以后快速复习进入状况吧. Request URL: "/root/version/entities" OData ...
- CSS – 管理
前言 CSS 有好几种写法. 它们最终出来的效果是一样的, 区别只是在你如何 "写" 和 "读" 或者说开发和维护. 这已经不是如何"实现" ...
- CSS – Icon
前言 Icon 并不容易搞. 市场有许多平台支持 Icon, 有些收费有些免费. 有些 icon 很丰富, 有些很缺失. 尤其是在做网站的时候寻找 icon 是一个挺累的事情. 这篇就来聊聊 icon ...
- 10 分钟快速搞懂 Lambda 表达式
Lambda简介 Lambda表达式是Java8引入的一个重要特性,相当于一个语法糖. 语法糖(Syntactic sugar)是指在编程语言中引入的一种语法,它可以使代码更易读.更简洁,但并没有引入 ...
- 一款超级给力的弱网测试神器—Qnet(附视频)
一.APP弱网测试背景 App在使用的过程中,难免会遇到不同的弱网络环境,像在公车上.在地铁.地下车库等.在这种情况下,手机常常会出现网络抖动.上行或下行超时,导致APP应用中出现丢包延迟,从而影响用 ...
- PMP——如何区分赶工与快速跟进?
如何区分赶工与快速跟进? 在PMP考试中经常出现由于时间不够需要进行进度压缩的场景.进度压缩的常用工具有赶工和快速跟进两种方式.也可以辅助调整某些活动的提前量与滞后量来进行缓解.提前量是相对于紧前活动 ...
- uart loglevel和pr_debug的区别
pr_debug 是 Linux 内核中用于打印调试信息的宏,它的行为会根据编译时的配置有所不同.如果定义了 CONFIG_DYNAMIC_DEBUG 配置选项,pr_debug 会扩展为 dynam ...
- 利用3Dnii标签文件,生成png图片
为了便于直观的看到2D标签,通常会将其转化为png图像,具体代码如下: # coding:utf-8 from glob import glob import os import SimpleITK ...