进程管理工具之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靶场”让数据管理更精准
合合信息旗下启信宝与鹏城实验室达成数据托管合作,"AI靶场"让数据管理更精准 数字经济时代,数据已成为新型生产要素.通过"数据托管"等形式对数据进行集中管理 ...
- 通用能力及AI核心能力表现优异!合合信息智能文档处理系统(IDP)高评级通过中国信通院评估
数字经济快速发展的背后,全球数据总量呈现出爆发式增长趋势.智能文档处理(IDP)技术能够高效地从多格式文档中捕捉.提取和处理数据,帮助机构和企业大幅提升文档处理效率,节约时间和人力成本.近期,合合信息 ...
- 工具 – Vite
前言 一直想 try Vite, 但一直没有机会. 今天突然 Live Server IP Address 手机连不上...也不知道是 Bug 还是怎么回事儿. 总之 IIS IP Address 没 ...
- 【赵渝强老师】MongoDB中的索引(上)
索引是提高查询查询效率最有效的手段.索引是一种特殊的数据结构,索引以易于遍历的形式存储了数据的部分内容(如:一个特定的字段或一组字段值),索引会按一定规则对存储值进行排序,而且索引的存储位置在内存中, ...
- 推荐一款轻量级 eBPF 前端工具 ply
1 Overview ply 是 eBPF 的 front-end 前端工具之一,专为 embedded Linux systems 开发,采用 C 语言编写,只需 libc 和内核支持 BPF 就可 ...
- dotnet Core 静态方法和构造方法
// 静态方法: // 特点:1.生命周期一旦创建-应用结束 才会结束 2.全局的 3.效率高(放在内存中) // 用户:用户登录,系统配置信息,系统设置,SQLHelper // 注意:静态的东西创 ...
- GDOI绝望记——人生第一次省选普及
时光匆匆,如白驹过隙. 转眼之间,我一在OI之路上走了2年半了.. 岁月不饶人,我却在不经意间饶了岁月. 自己到底是不是不如别人,这,是取决于自己的心态吧 Preface 人生中第一次去深圳(应该是吧 ...
- Tomcat通信概念篇
在上一篇了解完网络通信的基本概念之后,本章节为了解Tomcat的基本逻辑方便以后对 UDP:(发短信,不管是否能接受成功都会发送) //发送端 //不需要连接服务器 public static voi ...
- 快速搭建hadoop,zk,hbase的基础集群
1. ZK集群,Hadoop集群,Hbase集群安装 Linux121 Linux122 Linux123 Hadoop MySQL ZK HBASE 1.1 安装Vmware,安装虚拟机集群 1.1 ...
- python使用协程完成批量模拟支付
import asyncio import sys from queue import Queue sys.path.append("../") # from tool.__ini ...