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

【Express.js】pm2进程管理

pm2进程管理

本节我们将介绍如何使用 pm2 运行和监管我们的 express 项目

准备工作

  • 一个 express 项目
  • 全局安装 pm2
npm install -g pm2

pm2使用介绍

启动应用

你可以用纯命令去运行一个node项目,假设原本运行项目使用 node src/index.js可以跑起来一个项目,则:

pm2 start -name "pm2-node-app" node -- src/index

当然你还可以通过将部分信息写到配置文件中,文件可以是 js, json 等,js格式的可以通过以下命令生成:

pm2 init

这将得到一个名为 “ecosystem.config.js” 的文件,内容如下:

module.exports = {apps : [{script: 'index.js',watch: '.'}, {script: './service-worker/',watch: ['./service-worker']}],deploy : {production : {user : 'SSH_USERNAME',host : 'SSH_HOSTMACHINE',ref  : 'origin/master',repo : 'GIT_REPOSITORY',path : 'DESTINATION_PATH','pre-deploy-local': '','post-deploy' : 'npm install && pm2 reload ecosystem.config.js --env production','pre-setup': ''}}
};

deploy那部分是构建,在本节我们仅将 pm2 用于项目的运行管理,无需关注构建。重点是 apps 列表,每一个元素分别对应一个应用的配置信息,包括启动时运行的脚本命令(script),文件变动监控(watch)等

热重载

假设我们的源码入口位于 “src\index.js”,我们需要开发时热重启项目(仅src内文件变动):

module.exports = {apps : [{script: 'src/index.js',watch: ['src']}]
};

pm2根据这个文件去运行应用时可以直接这样:

pm2 start  // 与ecosystem.config.js同目录

如果你使用其它的配置文件,如 json,配置的格式也是类似的,则需要向pm2指明该配置文件名,如:

pm2 start app.json

管理应用

  • pm2 stop <id|name|namespace|all|json|stdin>:停止指定的应用
  • pm2 restart <id|name|namespace|all|json|stdin>:重启指定的应用
  • pm2 reload <id|name|namespace|all|json|stdin>:即刻重载web应用
  • pm2 delete <id|name|namespace|all|json|stdin>:删除指定的应用

应用监控

  • pm2 ls:终端中查看所有应用状况
  • pm2 monit:打开终端的监控面板
  • pm2 plus:在浏览器中的Dashboard,使用 pm2 plus 可能会报错,可以直接访问网址https://app.pm2.io/

查看日志

  • pm2 log:查看所有应用日志
  • pm2 log <id|name|namespace|all|json|stdin>:查看指定日志

应用集群

你可以将一系列应用划分到一个命名空间内作为一个集群,通过指定namespace,进行全体的重启等操作。
以 ecosystem.config.js 为例,这一组应用包含了2个 node 应用:

module.exports = {apps : [{name: 'express-app1',script: './app1/src/index.js',watch: './app1/src',namespace: 'express-demo'}, {name: 'express-app2',script: './app2/src/index.js',watch: './app2/src',namespace: 'express-demo'}]
};

关于 pm2 更多的使用技巧,还请诸君自行探索


下一章节-最佳实践

http://www.lryc.cn/news/164589.html

相关文章:

  • Nginx部署前后端分离项目(Linux)
  • Docker网络
  • 第15章_瑞萨MCU零基础入门系列教程之Common I2C总线模块
  • 《TCP/IP网络编程》阅读笔记--多播与广播
  • 聚观早报|华为Mate 60 Pro支持面容支付;特斯拉重回底特律车展
  • 本地缓存Caffeine的缓存过期淘汰策略
  • 激光焊接汽车尼龙塑料配件透光率测试仪
  • 2023年高校大数据实验室建设方案
  • 计网第五章(运输层)(一)
  • ILS解析漏洞复现
  • 0067__Git学习(1.本地仓库与暂存区)
  • Mac端交互式原型设计 Axure RP 8 for Mac汉化
  • GO语言网络编程(并发编程)Sync
  • 如何在 Ubuntu 上安装 Nagios?
  • 汽车技术发展趋势及我国节能与新能源汽车技术
  • 如何实现负载均衡
  • Jetsonnano B01 笔记3:GPIO上拉下拉-输入输出读取
  • COMO-ViT论文阅读笔记
  • 智慧燃气:智慧燃气发展的讨论
  • 音视频会议需要哪些设备配置
  • 性能测试 —— Jmeter事务控制器
  • 【Tomcat7部署Springboot版本不兼容问题】
  • RabbitMQ消息中间件
  • UNIAPP之js/nvue混淆探索
  • Excel文件生成与下载(SpringBoot项目)(easypoi)
  • 社群团购对接,【概率思维】可以增加你做项目的成功率!
  • 不同场景下的JMETER设置
  • 新手请进,Python是什么,Python简介!
  • 《Python魔法大冒险》005 魔法挑战:自我介绍机器人
  • 常见的网络欺诈风险类型有哪些?