【物联网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里的有监督任务的范式,可以归纳成如下的样子。 输入是字词序列,中间一步关键的是语义表征,有了语义表征之后,然后交给下游的模型学习。所以预训练技术的发展,都是在围绕怎么…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
 
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
 
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
 
中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
 
处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
 
RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
 
如何应对敏捷转型中的团队阻力
应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中,明确沟通敏捷转型目的尤为关键,团队成员只有清晰理解转型背后的原因和利益,才能降低对变化的…...
 
Xela矩阵三轴触觉传感器的工作原理解析与应用场景
Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知,帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量,能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度,还为机器人、医疗设备和制造业的智…...
Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解
文章目录 一、开启慢查询日志,定位耗时SQL1.1 查看慢查询日志是否开启1.2 临时开启慢查询日志1.3 永久开启慢查询日志1.4 分析慢查询日志 二、使用EXPLAIN分析SQL执行计划2.1 EXPLAIN的基本使用2.2 EXPLAIN分析案例2.3 根据EXPLAIN结果优化SQL 三、使用SHOW PROFILE…...






