【物联网NodeJs-5天学习】第四天存储篇⑤ ——PM2,node.js应用进程管理器
【NodeJs-5天学习】第四天存储篇⑤ ——PM2,node.js应用进程管理器
- 1. 前言
- 2. 官方说明
- 3. 安装PM2
- 4. PM2常用命令
- 4.1 启动命令
- 4.2 重新启动命令
- 4.3 热重载命令
- 4.4 停止命令
- 4.5 删除命令
- 4.6 查看进程运行状态
- 4.4 显示某一个进程的具体信息
- 4.8 显示日志信息
- 4.9 终端监控器
- 4.10 开机自启动
- 4.11 综合命令
- 5. PM2配置文件
- 6. PM2 API方式接入(可选)
- 7. 总结
面向读者群体
- ❤️ 电子物联网专业同学,想针对硬件功能构造简单的服务器,不需要学习专业的服务器开发知识 ❤️
- ❤️ 业余爱好物联网开发者,有简单技术基础,想针对硬件功能构造简单的服务器❤️
- ❤️ 本篇创建记录 2023-03-12 ❤️
- ❤️ 本篇更新记录 2023-03-12 ❤️
技术要求
- 有HTML、CSS、JavaScript基础更好,当然也没事,就直接运行实例代码学习
专栏介绍
- 通过简短5天时间的渐进式学习NodeJs,可以了解到基本的服务开发概念,同时可以学习到npm、内置核心API(FS文件系统操作、HTTP服务器、Express框架等等),最终能够完成基本的物联网web开发,而且能够部署到公网访问。
🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请留言轰炸哦!及时修正!感谢支持!🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝
1. 前言
之前很多情况下我们启动nodejs项目都是通过node命令去启动,但是这种方式一般也不是很稳定安全(如果直接通过node app来启动,如果报错了可能直接停在整个运行)。这时候就需要一个node进程管理工具
(也叫作应用管理,像我们之前用的nodemon
,更偏向于用于开发中服务热加载),可以利用它来简化很多node应用管理的繁琐任务,如性能监控、自动重启、负载均衡等。
这就是我们本篇需要介绍到的PM2管理器。
在部署 【ESP 保姆级教程】疯狂Node.js服务器篇 ——nodejs应用部署到腾讯云,实现公网访问 中,我们就涉及到PM2的使用。
2. 官方说明
- PM2官方英文说明
保证你的NodeJS程序 24小时正常运行。
3. 安装PM2
cmd上面输入命令:
npm install pm2 -g
这时候我们就可以用PM2来接管原来的node启动命令了。这里我们随便启动一个原有的NodeJs项目:
pm2安装好后,会自动创建下面目录。
核心几个目录文件信息:
-
logs
包含所有管理中的NodeJs应用的日志信息(这样就方便我们可以看到对应应用的日志信息,方便排查问题)
-
pids
包含所有应用的进程id
通过cmd命令qprocess PID编号
(这里是qprocess 19292) 查看一下:
信息能对上。 -
pm2.log
这里是PM2管理器自己本身的日志信息
-
pm2.pid
这里是PM2管理器自己本身的进程ID
4. PM2常用命令
PM2命令不多,我们来了解一些比较有用的。
4.1 启动命令
最基本的启动命令:
pm2 start app.js
也可以加上一些参数,包括:
--watch
监听应用目录的变化,一旦发生变化,自动重启。--ignore-watch
排除监听的目录/文件,可以是特定的文件名,也可以是正则。比如pm2 start env.js --watch --ignore-watch="node_modules"
不监听node_modules目录变化。--name <app_name>
自定义一个应用名称。查看应用信息的时候可以用到。-o --output <path>
标准输出日志文件的路径。建议不改-e --error <path>
错误输出日志文件的路径。建议不改
完整命令行参数:直接查看官方文档
# Specify an app name
--name <app_name># Watch and Restart app when files change
--watch# Set memory threshold for app reload
--max-memory-restart <200MB># Specify log file
--log <log_path># Pass extra arguments to the script
-- arg1 arg2 arg3# Delay between automatic restarts
--restart-delay <delay in ms># Prefix logs with time
--time# Do not auto restart app
--no-autorestart# Specify cron for forced restart
--cron <cron_pattern># Attach to application log
--no-daemon
另外,也可以通过配置yml文件启动。在项目根目录创建一个yml文件:
输入内容:
apps:- script : index.jsname : 'app'watch: true
执行命令:
pm2 start app.yml
4.2 重新启动命令
pm2 restart app_name
这里重启一下我们上面刚刚打开的应用,它的名字使用了默认,是index
注意,这个命令只会重启在PM2管理记录里面的应用。如果通过delete命令去操作无法重启成功。
4.3 热重载命令
pm2 reload app_name
这里热重载
一下我们上面刚刚打开的应用,它的名字使用了默认,是index
注意,这个命令只会热重载在PM2管理记录里面的应用。如果通过delete命令去操作无法重启成功。
4.4 停止命令
停止特定的应用。可以先通过pm2 list获取应用的名字
(–name指定的)或者进程id
。
- pm2 stop app_name|app_id
停止所有的应用。
- pm2 stop all
这里我们分别停止单个应用,它的名字使用了默认,是index
以及停止全部应用。
4.5 删除命令
删除特定的应用。可以先通过pm2 list获取应用的名字
(–name指定的)或者进程id
。
- pm2 delete app_name|app_id
停止所有的应用。
- pm2 delete all
对比停止命令,删除命令更加彻底,直接连记录也删除了。
4.6 查看进程运行状态
- pm2 [list|ls|status]
4.4 显示某一个进程的具体信息
- pm2 describe app_id
4.8 显示日志信息
- pm2 logs [–lines n]
4.9 终端监控器
- pm2 monit
4.10 开机自启动
- 保存当前进程状态
pm2 save
- 生成开机自启动脚本
pm2 startup
在win系统上执行这个命令行是有问题的,使用其他库生成自启动脚本。
- pm2-windows-service
- pm2-windows-startup
输入命令行:
npm install pm2-windows-startup -g
输入命令行:
pm2-startup install
pm2 将在启动时恢复已保存的进程
- 移除启动脚本
pm2 unstartup
(window系统用pm2-startup uninstall
)
4.11 综合命令
# Fork mode
pm2 start app.js --name my-api # Name process# Cluster mode
pm2 start app.js -i 0 # Will start maximum processes with LB depending on available CPUs
pm2 start app.js -i max # Same as above, but deprecated.
pm2 scale app +3 # Scales `app` up by 3 workers
pm2 scale app 2 # Scales `app` up or down to 2 workers total# Listingpm2 list # Display all processes status
pm2 jlist # Print process list in raw JSON
pm2 prettylist # Print process list in beautified JSONpm2 describe 0 # Display all information about a specific processpm2 monit # Monitor all processes# Logspm2 logs [--raw] # Display all processes logs in streaming
pm2 flush # Empty all log files
pm2 reloadLogs # Reload all logs# Actionspm2 stop all # Stop all processes
pm2 restart all # Restart all processespm2 reload all # Will 0s downtime reload (for NETWORKED apps)pm2 stop 0 # Stop specific process id
pm2 restart 0 # Restart specific process idpm2 delete 0 # Will remove process from pm2 list
pm2 delete all # Will remove all processes from pm2 list# Miscpm2 reset <process> # Reset meta data (restarted time...)
pm2 updatePM2 # Update in memory pm2
pm2 ping # Ensure pm2 daemon has been launched
pm2 sendSignal SIGUSR2 my-app # Send system signal to script
pm2 start app.js --no-daemon
pm2 start app.js --no-vizion
pm2 start app.js --no-autorestart
这些命令都可以输入到命令行看看效果。
5. PM2配置文件
以上我们都是通过命令行一句句输入,那么肯定会考虑如果有一个配置文件直接执行会不会更好。这就用到了ecosystem.config.js
:文件。
官方文档参考:https://pm2.keymetrics.io/docs/usage/application-declaration/
输入命令
pm2 init simple
会在当前项目根目录下生成一个 ecosystem.config.js 文件。
module.exports = {apps : [{name : "app1",script : "./index.js"}]
}
这里就定义应用名字,和执行脚本的启动文件(和我们上面通过yml文件启动配置一样)。接下来就可以用以下命令代替原先的一些操作命令。
# Start all applications
pm2 start ecosystem.config.js# Stop all
pm2 stop ecosystem.config.js# Restart all
pm2 restart ecosystem.config.js# Reload all
pm2 reload ecosystem.config.js# Delete all
pm2 delete ecosystem.config.js
注意,这里可以和命令行对比。
6. PM2 API方式接入(可选)
上面说的都是通过命令行接入,实际上PM2也支持以NodeJS项目 api的方式接入。喜欢的朋友可以创建一个类似于PM2管理者角色的项目来维护所有项目状态。
参考官方文档:pm2-doc-single-page
const pm2 = require('pm2')pm2.connect(function(err) {if (err) {console.error(err)process.exit(2)}pm2.start({script : 'api.js',name : 'api'}, function(err, apps) {if (err) {console.error(err)return pm2.disconnect()}pm2.list((err, list) => {console.log(err, list)pm2.restart('api', (err, proc) => {// Disconnects from PM2pm2.disconnect()})})})
})
学习的时候我们直接对照命令行来看即可。
7. 总结
本篇主要学习一下 PM2这个 node.js应用进程管理工具,特别是针对比较多NodeJS项目运行时,我们如何做到更加合理去管理运行状态。这里只是简单介绍一下,抛砖引玉,深入的学习还请直接阅读官方文档。
相关文章:

【物联网NodeJs-5天学习】第四天存储篇⑤ ——PM2,node.js应用进程管理器
【NodeJs-5天学习】第四天存储篇⑤ ——PM2,node.js应用进程管理器1. 前言2. 官方说明3. 安装PM24. PM2常用命令4.1 启动命令4.2 重新启动命令4.3 热重载命令4.4 停止命令4.5 删除命令4.6 查看进程运行状态4.4 显示某一个进程的具体信息4.8 显示日志信息4.9 终端监控…...

【C++学习】【STL】deque容器
dequeDouble Ended Queues(双向队列)deque和vector很相似,但是它允许在容器头部快速插入和删除(就像在尾部一样)。所耗费的时间复杂度也为常数阶O(1)。并且更重要的一点是,deque 容器中存储元素并不能保证所有元素都存储到连续的内…...

当 App 有了系统权限,真的可以为所欲为?
看到群里发了两篇文章,出于好奇,想看看这些个 App 在利用系统漏洞获取系统权限之后,都干了什么事,于是就有了这篇文章。由于准备仓促,有些 Code 没有仔细看,感兴趣的同学可以自己去研究研究,多多…...

vue3.js的介绍
一.vue.js简述 Vue是一套用于构建用户开源的MVVM结构的Javascript渐进式框架,尤雨溪在2015年10月27日发布了vue.js 1.0Eavangelion版本,在2016年9月30日发布了2.0Ghost in the Shell版本,目前项目由官方负责 vue的核心只关注图层࿰…...

【Three.js】shader特效 能量盾
shader特效之能量盾前言效果噪点图主要代码index.htmldepth-fs.jsdepth-vs.jsshield-fs.jsshield-vs.js相关项目前言 效果噪点图 为了可以自定义能量球的效果,这里使用外部加载来的噪点图做纹理,省去用代码写特效的过程。 主要代码 index.html <…...
【6000字长文】需求评审总是被怼?强烈推荐你试试这三招
前段时间和一个合作部门的产品新人沟通需求,结束的时候,他问了我一个问题,“你在产品新人阶段,最害怕做的事情是什么”? 我不假思索的回答说,“需求评审,是曾经最不想面对的环节,甚至在评审之前几个小时就开始心跳加速了。当然这也是产品修炼路上的必经之路,其实只要掌…...

Hive介绍及DDL
1.OLTP和OLAP OLTP: 联机事务处理系统。在前台接收的用户数据可以立即传送到后台进行处理,并在很短的时间内给出处理结果。关系型数据库是OLTP典型应用,如MySQL OLTP环境开展数据分析是否可行? 为了更好的开展数据分析&#x…...

Simulink 自动代码生成电机控制:在某国产ARM0定点MCU上实现自动代码生成无感电机控制
目录 前言 开发流程 定点化的技巧 代码生成运行演示 总结 前言 这次尝试了在国产arm0内核的MCU上实现Simulink自动代码生成永磁同步电机无传感控制。机缘巧合之下拿到了一块国产MCU的电机控制板和一个5000RPM的小电机。最后实现了无传感控制,在这里总结下一些经…...

MySQL基本查询
文章目录表的增删查改Create(创建)单行数据 全列插入多行数据 指定列插入插入否则更新替换Retrieve(读取)SELECT列全列查询指定列查询查询字段为表达式查询结果指定别名结果去重WHERE 条件基本比较BETWEEN AND 条件连接OR 条件连…...
你需要知道的 7 个 Vue3 技巧
VNode 钩子在每个组件或html标签上,我们可以使用一些特殊的(文档没写的)钩子作为事件监听器。这些钩子有:onVnodeBeforeMountonVnodeMountedonVnodeBeforeUpdateonVnodeUpdatedonVnodeBeforeUnmountonVnodeUnmounted我主要是在组件…...
行政区划获取
行政区划获取一、导入jar包二、代码展示背景:公司的行政区划代码有问题,有的没有街道信息,有的关联信息有误,然后找到了国家的网站国家统计局-行政区划,这个里面是包含了所有的行政信息,但是全是html页面&a…...

让ChatGPT介绍一下ChatGPT
申请新必应内测通过了,我在New Bing中使用下ChatGPT,让ChatGPT介绍一下ChatGPT 问题1:帮我生成一篇介绍chatGPT的文章,不少于2000字 回答: chatGPT是什么?它有什么特点和用途? chatGPT是一种…...

【Redis】Redis 主从复制 + 读写分离
Redis 主从复制 读写分离1. Redis 主从复制 读写分离介绍1.1 从数据持久化到服务高可用1.2 主从复制1.3 如何保证主从数据一致性?1.4 为何采用读写分离模式?2. 一主两从环境准备2.1 配置文件2.2 启动 Redis3. 主从复制原理3.1 全量同步3.1.1 建立连接3…...

2023届秋招,鬼知道我经历了什么
仅记录个人经历,充满主观感受,甚至纯属虚构,仅供参考,杠就是你对 本想毕业再写,但是考虑到等毕业了,24秋招的提前批就快开始了,大概就来不及了,正好现在有点时间,陆陆续…...

ChatGPT助力校招----面试问题分享(一)
1 ChatGPT每日一题:期望薪资是多少 问题:面试官问期望薪资是多少,如何回答 ChatGPT:当面试官问及期望薪资时,以下是一些建议的回答方法: 1、调查市场行情:在回答之前,可以先调查一…...

CSS媒体查询@media (prefers-color-scheme:dark)判断系统白天黑夜模式
前言 在最近学习中突然看到了在媒体查询中prefers-color-scheme:dark监听的使用,然后就模仿里边写了个简单例子,代码如下: body {background-color: #f5f5f5;}media (prefers-color-scheme: dark) {body {background-color: #666;}}然后通过…...

运行YOLOv8实现识别
https://github.com/ultralytics/ultralyticshttps://docs.ultralytics.com/环境配置官方环境要求Python>3.7(我是python3.8也是可以用的) environment with PyTorch>1.7.这是ultralyticsCommand Line Interface命令行接口运行输入参数的格式yolo …...

如何在Linux中优雅的使用 head 命令,用来看日志简直溜的不行
当您在 Linux 的命令行上工作时,有时希望快速查看文件的第一行,例如,有个日志文件不断更新,希望每次都查看日志文件的前 10 行。很多朋友使用文本编辑的命令是vim,但还有个命令head也可以让轻松查看文件的第一行。 在…...
Nginx.conf 配置详解
#安全问题,建议用nobody,不要用root. #user nobody; #worker数和服务器的cpu数相等是最为适宜 worker_processes 2; #work绑定cpu(4 work绑定4cpu) worker_cpu_affinity 0001 0010 0100 1000 #error_log path(存放路径) level(日志等级) path表示日志路径&…...

剖析NLP历史,看chatGPT的发展
1、NLP历史演进 1.1 NLP有监督范式 NLP里的有监督任务的范式,可以归纳成如下的样子。 输入是字词序列,中间一步关键的是语义表征,有了语义表征之后,然后交给下游的模型学习。所以预训练技术的发展,都是在围绕怎么…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...

linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...

《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...

(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器
一、原理介绍 传统滑模观测器采用如下结构: 传统SMO中LPF会带来相位延迟和幅值衰减,并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF),可以去除高次谐波,并且不用相位补偿就可以获得一个误差较小的转子位…...