查看pm2管理

pm2 list
┌────┬──────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name         │ namespace   │ version │ mode    │ pid      │ uptime │ ↺    │ status    │ cpu      │ mem      │ user     │ watching │
├────┼──────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0  │ app          │ default     │ N/A     │ fork    │ N/A      │ 8h     │ 0    │ online    │ 0%       │ 0b       │ root     │ disabled │
│ 1  │ steak-api    │ default     │ N/A     │ fork    │ N/A      │ 8h     │ 0    │ online    │ 0%       │ 0b       │ root     │ disabled │

1.进入后端路径

cd /usr/share/nginx/html/server

2.使用 PM2 启动应用

pm2 start app.js --name "NewsSystem-api"

此项目的 Express 应用需要使用 bin/www 文件来启动,而不是 app.js

pm2 start ./bin/www --name NewsSystem-api
pm2 start ./bin/www --name NewsSystem-api
[PM2] Starting /usr/share/nginx/html/server/bin/www in fork_mode (1 instance)
[PM2] Done.
┌────┬───────────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name              │ namespace   │ version │ mode    │ pid      │ uptime │ ↺    │ status    │ cpu      │ mem      │ user     │ watching │
├────┼───────────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 4  │ NewsSystem-api    │ default     │ 0.0.0   │ fork    │ 113151   │ 0s     │ 0    │ online    │ 0%       │ 0b       │ root     │ disabled │
│ 0  │ app               │ default     │ N/A     │ fork    │ N/A      │ 8h     │ 0    │ online    │ 0%       │ 0b       │ root     │ disabled │
│ 1  │ steak-api         │ default     │ N/A     │ fork    │ N/A      │ 8h     │ 0    │ online    │ 0%       │ 0b       │ root     │ disabled │

3.让 PM2 开机自启

1.pm2 startup

pm2 startup systemd

2.pm2 save

[root@VM-4-8-centos server]# pm2 save
[PM2] Saving current process list...
[PM2] Successfully saved in /root/.pm2/dump.pm2

4.验证整个流程是否成功

1. 重启整个服务器

sudo reboot

2.让 PM2 恢复所有保存的应用

pm2 resurrect

这个命令模拟了系统启动时 pm2-root.service 所做的工作。执行后,检查你的应用 my-api 的状态是否从 stopped 变成了 online,并且网站接口也恢复了。

如果 resurrect 命令成功,那就证明你的开机自启配置完全正确。


总结:以后更新代码后的完整工作流

现在的生产环境部署流程应该是这样的:

  1. 部署新代码 (例如通过 git pull)

  2. 安装新增依赖 (如果有的话)

  3. 重启 PM2 进程以使新代码生效

    pm2 restart my-api
  4. (可选) 再次保存进程列表 (通常不需要,除非你新增或删除了进程)

    pm2 save

至此,已经拥有了一个完全体的生产环境 Node.js 服务,它具备了:

  • 后台运行

  • 崩溃自动重启

  • 服务器开机自动启动

  • 便捷的日志查看 (pm2 logs)

  • 便捷的状态管理 (pm2 status)

以后再也不需要手动输入 npm start 了。


应用生命周期管理

# 启动一个应用并为其命名(推荐)
pm2 start app.js --name "my-api"# 启动应用并监听文件变化(用于开发环境,文件修改后自动重启)
pm2 start app.js --name "my-api" --watch# 启动应用并传递环境变量(NODE_ENV=production)
pm2 start app.js --name "my-api" --env production# 重启指定应用(代码更新后常用)
pm2 restart my-api# 优雅地重载应用(集群模式时逐个重启,实现零停机更新)
pm2 reload my-api# 停止指定应用(停止但不从PM2列表中移除)
pm2 stop my-api# 删除指定应用(从PM2列表中完全移除)
pm2 delete my-api# 停止并删除所有应用
pm2 delete all

监控与信息查看

# 查看所有被PM2管理的应用状态(最常用)
pm2 status
# 或者
pm2 list# 实时监控所有应用的CPU和内存使用情况(类似top命令)
pm2 monit# 查看指定应用的实时日志(-f 表示follow,持续输出)
pm2 logs my-api
pm2 logs my-api --lines 100  # 查看最后100行日志# 查看所有应用的实时日志
pm2 logs# 清空指定应用的日志文件
pm2 flush my-api# 显示指定应用的详细信息(包括路径、环境变量等)
pm2 show my-api# 显示所有应用的详细信息
pm2 show all

集群模式与性能

# 以集群模式启动应用,自动利用所有CPU核心(用于提升性能)
pm2 start app.js -i max --name "my-api-cluster"# 启动指定数量的实例(例如4个实例)
pm2 start app.js -i 4 --name "my-api-cluster"

启动配置与持久化

# 生成一个示例的PM2配置文件(ecosystem.config.js)
pm2 init# 使用配置文件启动应用(推荐用于复杂配置)
pm2 start ecosystem.config.js# 保存当前进程列表到磁盘,用于开机自启(非常重要!)
pm2 save# 恢复上次保存的进程列表(模拟开机自启过程)
pm2 resurrect

系统服务与自启

# 配置PM2为系统服务,实现开机自启(针对当前用户)
pm2 startup# 移除开机自启配置
pm2 unstartup# 如果pm2 startup提示需要以sudo运行,请使用:
pm2 startup systemd -u your_username --hp /home/your_username

维护与实用命令

# 平滑重启PM2自身(不中断当前管理的进程)
pm2 gracefulReload# 生成当前环境的启动脚本(用于调试)
pm2 startup [platform] --help# 查看PM2的版本信息
pm2 --version# 强制PM2触发一个快照并发送到PM2 Plus(如果使用的话)
pm2 update

配置文件示例 (ecosystem.config.js)

对于生产环境,强烈推荐使用配置文件:

module.exports = {apps: [{name: "my-api",           // 应用名称script: "./app.js",       // 入口文件instances: "max",         // 集群实例数,max表示按CPU核心数exec_mode: "cluster",     // 集群模式env: {NODE_ENV: "development", // 开发环境变量},env_production: {NODE_ENV: "production",  // 生产环境变量(使用--env production启用)},watch: false,             // 是否监听文件变化(生产环境应为false)max_memory_restart: "1G", // 内存超过1G自动重启log_file: "logs/combined.log",      // 合并日志文件out_file: "logs/out.log",           // 标准输出日志error_file: "logs/err.log",         // 错误日志time: true                // 日志中显示时间戳}]
};

使用配置文件:

# 启动所有在配置文件中定义的应用
pm2 start ecosystem.config.js# 使用生产环境变量启动
pm2 start ecosystem.config.js --env production# 重启配置文件中定义的应用
pm2 restart ecosystem.config.js

作为日常开发的速查手册。pm2 statuspm2 logspm2 restart 这几个是最常用的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/96490.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/96490.shtml
英文地址,请注明出处:http://en.pswp.cn/web/96490.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CCN中商再获三项知识产权,为数字化服务添动能

上海中商网络股份有限公司(CCN中商)依托持续的研发投入与深厚的技术积淀,在知识产权领域再获重要突破——成功收获三项知识产权,囊括实用新型专利《一种3D霓彩智感双条光柱印刷用全自动生产线》、发明专利《一种一物一码关联系统及…

使用LTspice仿真一个异步BUCK电路

确定异步BUCK的规格 输入电压(Vin):12V 输出电压(Vout):6V 最大输出电流(Iout):3A 开关频率(fsw):400kHz 输出电压纹波(Δ…

R语言对excel中多个sheet子表批量进行地理探测器计算

## 基本设置 ## 1) 设定你的工作目录&#xff08;保持你的原路径不变&#xff09; setwd("D:/*****/*****/******")## 2) 文件名&#xff08;与xlsx实际名字保持一致&#xff09; xlsx_file <- "驱动因素&#xff08;中低收入&#xff09;.xlsx"## 依…

C++ JSON 数据库:jsoncpp

jsoncpp1. JSON数据1.1 JSON 的基本语法规则1. 基础语法要求两种核心数据结构JSON 与其他数据格式的对比1.2 JSON 的典型应用场景1.3 JSON 解析与生成工具2. 编程语言库&#xff08;解析/生成&#xff09;1.4 常见错误与注意事项2. jsoncpp2.1 基本用法1. 安装与集成2. 核心类与…

《苍穹外卖》项目日记_Day9

前言&#xff1a; 上午就把今天任务完成了&#xff0c;就继续往后学了一些知识&#xff0c;晚上写下笔记总结一下。 今日完成任务&#xff1a; 调用百度地图开放平台&#xff0c;优化用户下单业务学习SpringTask&#xff0c;定时处理超时、派送中订单学习WebSocket&#xff0c;…

人工智能学习:Transformer结构中的编码器层(Encoder Layer)

Transformer结构中的编码器层(Encoder Layer) 一、编码器层介绍 概念 编码器层(Encoder Layer)是Transformer编码器的基本构建单元,它重复堆叠形成整个编码器,负责逐步提取输入序列的特征。每个编码器层由两个核心子层组成: 多头自注意力机制(Multi-Head Self-Attentio…

2018年下半年 系统架构设计师 综合知识

1.在磁盘调度管理中&#xff0c;应先进行移臂调度&#xff0c;再进行旋转调度。假设磁盘移动臂位于21 号柱面上&#xff0c;进程的请求序列如下表所示。如果采用最短移臂调度算法&#xff0c;那么系统的响应 序列应为(D )。A. ②⑧③④⑤①⑦⑥⑨ …

数据库的连接_qt

数据库的连接形式可以通过cmd查看 1.获取 UI 输入的连接参数 // 获取主机名&#xff08;如"localhost"或IP地址&#xff09; QString hostStr hostEdit->text(); // 从hostEdit控件获取文本 QByteArray hostBa hostStr.toUtf8(); // 转换为UTF-8编码的字节数…

HTML 设计与使用入门

HTML 设计与使用入门 一、完整示例&#xff08;基础页面模板&#xff09;这是一个结构清晰、可直接拷贝运行的最小 HTML 模板&#xff1a;<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"utf-8"><meta name"vie…

Gradio全解11——Streaming:流式传输的视频应用(2)——Twilio:网络服务提供商

Gradio全解11——Streaming&#xff1a;流式传输的视频应用&#xff08;2&#xff09;——Twilio&#xff1a;网络服务提供商11.2 Twilio&#xff1a;网络服务提供商11.2.1 Twillo穿透服务与TURN服务器1. 什么是STUN、TURN和ICE&#xff1f;2. Twilio介绍及网络穿透服务3. Twil…

【更新至2024年】2009-2024年各地级市金融科技水平数据

【更新至2024年】2009-2024年各地级市金融科技水平数据 1、时间&#xff1a;2009-2024年 2、来源&#xff1a;天眼查 3、指标&#xff1a;年份、省份、地级市、地级市代码、当年新注册金融科技公司数量、累计注册金融科技公司数量、金融科技水平 4、范围&#xff1a;地级市…

一般软件加载显示图片的流程

目录 1、一般图片浏览软件的流程&#xff08;Qt 或类似框架&#xff09;&#xff1a; 1️⃣ 读取原始数据 2️⃣ 解析图片格式 3️⃣ 存储到内部可用的绘制对象 4️⃣ 显示到界面 ✅ 总结 2、那什么叫“QPixmap 在 Qt 里就是“显示专用的像素缓存”&#xff0c;不是原始…

【论文阅读】REFRAG:一个提升RAG解码效率的新思路

引言 看到一则报道[1]&#xff0c;重组后的Meta实验室在9月1号发布了一篇关于提升RAG解码效率的论文&#xff0c;提出的思路有点启发作用&#xff0c;于是把原文下载下来仔细看下。 论文标题&#xff1a;REFRAG: Rethinking RAG based Decoding 论文地址&#xff1a;https://ar…

QT M/V架构开发实战:QFileSystemModel介绍

目录[TOC](目录)前言一、QFileSystemModel初步介绍二、基本功能1.创建2.基本属性与方法三、示例&#xff08;简单的文件浏览器&#xff09;四、性能注意事项前言 本文主要介绍的是使用代码生成的情况下对控件的介绍&#xff0c;包括拥有的功能及能修改的样式&#xff0c;也会说…

视频生成迎来效率革命!字节提出视频生成稀疏注意力机制,计算量降20倍,速度升17.79倍!

论文链接&#xff1a;https://arxiv.org/pdf/2509.01085亮点直击BSA——一种可训练的双向动态稀疏注意力框架&#xff0c;该框架首次在视频扩散训练中对全注意力机制中的查询&#xff08;Query&#xff09;及键值对&#xff08;Key-Value&#xff09;进行正交稀疏化处理以加速训…

STM32HAL库_cubeMX

ADC简介STM32f103的是12位逼近型ADC代码连续非扫描模式&#xff08;1个通道&#xff09;1&#xff1a;校准ADC&#xff08;这个可要可不要&#xff09;2&#xff1a;ADC初始化3&#xff1a;配置ADC通道&#xff08;这个函数只有一个通道时就是可要可不要&#xff09;4&#xff…

【Qt】清空QDateTimeEdit

代码 ui->startDate->setSpecialValueText(" "); //这里是空格 ui->startDate->setMinimumDate(QDate(2024, 1, 1)); ui->startDate->setDate(QDate::fromString("2024-01-01", "yyyy-MM-dd"));原理 设置特殊值显示文本&#…

LiTS 2017 datasets

下载记录 论文地址&#xff1a;https://doi.org/10.1016/j.media.2022.102680 官方下载链接&#xff1a;https://competitions.codalab.org/competitions/17094 进入链接后&#xff0c;需要先注册才能拿到下载点击Train data下面的Mirro1&#xff0c;在google云盘会看到Trai…

kafka3.8集群搭建

kafka集群需要三台机器搭建&#xff0c;并使用内置zookeeperIP10.0.0.110.0.0.210.0.0.3安装jdk # ubuntu sudo apt install -y openjdk-8-jdk-headless # centos sudo yum install -y java-1.8.0-openjdk下载kafka wget https://archive.apache.org/dist/kafka/3.8.1/kafka_2…

从15kHz 到20MHz:为什么LTE带宽不能被子载波间隔整除?

从 15 kHz 到 20 MHz&#xff1a;为什么 LTE 带宽不能被子载波间隔整除&#xff1f; 1. 引言 在 LTE 系统中&#xff0c;子载波间隔被固定为 15 kHz&#xff0c;而系统带宽却被设计为 1.4、3、5、10、15、20 MHz 六个档位。乍一看&#xff0c;这些带宽似乎无法被 15 kHz 整除&a…