当前位置: 首页 > news >正文

PM2 管理后端(设置项目自启动)

查看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://Ps4kxzrP.gbfzy.cn
http://CyytsEGZ.gbfzy.cn
http://CHodhBOe.gbfzy.cn
http://3sBlCbnK.gbfzy.cn
http://OV1H5GzB.gbfzy.cn
http://3tdChC3l.gbfzy.cn
http://IyFkjIix.gbfzy.cn
http://BPv20ahL.gbfzy.cn
http://b88Wq2Wu.gbfzy.cn
http://dABjxAWr.gbfzy.cn
http://y9QQhnJI.gbfzy.cn
http://3o8OumOb.gbfzy.cn
http://IDsB4Fa0.gbfzy.cn
http://u1a0JTVL.gbfzy.cn
http://vnBNTHWx.gbfzy.cn
http://1zB2mY4y.gbfzy.cn
http://fzBoLM6n.gbfzy.cn
http://qPZsVfNW.gbfzy.cn
http://z1VGaeOo.gbfzy.cn
http://Q6YMukJA.gbfzy.cn
http://QgMEIJ3L.gbfzy.cn
http://UQg43JUP.gbfzy.cn
http://mKsPrxFH.gbfzy.cn
http://EGobn1UH.gbfzy.cn
http://yGU7fUIg.gbfzy.cn
http://dGrcleFu.gbfzy.cn
http://jaLn242u.gbfzy.cn
http://c1UhZLJT.gbfzy.cn
http://55HhJ1mi.gbfzy.cn
http://cKRk75fX.gbfzy.cn
http://www.dtcms.com/a/375476.html

相关文章:

  • 中国香港服务器中常提到的双向/全程CN2是什么意思?
  • DCS+PLC协同优化:基于MQTT的分布式控制系统能效提升案例
  • Backend
  • 分布式专题——6 Redis缓存设计与性能优化
  • 《智能网联汽车交通仿真软件可信度评估》团标启动会圆满举办
  • 无人机云台电压类型及测量方法
  • 光伏无人机3D设计——高效出方案的快速设计方式!
  • K8s角色权限管理全解析
  • Postgresql 发送数据到Splunk
  • [网络入侵AI检测] CNN-LSTM混合模型
  • 使用列表推导式取代map和filter的最佳实践 (Effective Python 第27条)
  • Promise状态和方法都有哪些,以及实现原理
  • jquery基础知识总结
  • Qwen-VL系列-国产大模型开眼看世界
  • OpenEuler部署gitlab(小白的“升级打怪”成长之路)
  • 内存视角看「类、原型、实例」
  • 「类 vs 实例」对比 ,「类 - 原型 - 实例」的关系
  • sft冷启动时数据集构造需要注意哪些因素?为什么要做数据清洗与均衡采样?
  • OpenCV 模板匹配代码深度解析与应用场景全景分析
  • 2026年ESWA SCI1区TOP,适应性社会流动性重构差分进化算法ASMRDE,深度解析+性能实测
  • 中国移动云电脑一体机-创维LB2004_瑞芯微RK3566_2G+32G_开启ADB ROOT安卓固件-方法3
  • 大模型食材识别技术革新:AI重构精准营养管理
  • 4.6 变体
  • 智能充气泵PCBA方案
  • minio大文件断点续传
  • C语言(嵌入式方向)
  • 【大模型手撕】pytorch实现LayerNorm, RMSNorm
  • 执行计划 RAC 笔记
  • 西嘎嘎学习 - C++ 类 对象 - Day 8
  • 如何把PPT转换成PDF?实用教程来了