使用pm2管理你的项目

news/2025/2/4 4:06:34/

使用pm2管理你的项目

前言

笔者从前一直觉得 docker/k8s 在手天下我有,集群运行与部署无往不利。但忽略了一个前提,这是基于容器化的技术,绝大多数情况下在 Linux 中使用,其它的容器诸如 Windows Container,坑点很多配置也麻烦。有时候需要在非 Linux 的场景下运作,这套执行难度还是比较大的。

于是笔者前段时间抽空使用 tauri 开发了一个桌面应用,通过将项目的路径、启动脚本等信息写在json中,然后作为配置文件导入,来实现在应用上通过点击实现项目的运行部署等等功能。理想很美好,现实很骨感,当开发到项目重启的功能时,由于笔者对 cmd 脚本知之甚少,并且由于很烦写界面UI,最终项目搁浅了。

不过,昨天突然想到了传闻中的一个npm包——pm2,便去研究了一下,感觉功能还是很强大的并且比较全面的,无论是在终端还是Dashboard中使用都很方便,此外我的桌面应用也完全可以直接基于pm2进行更方便的开发。

不多废话了,我们来看看 pm2 可以做些什么吧!

安装

全局安装 pm2 即可,前提是有安装 node14+

npm i pm2 -g

启动应用

pm2 start :
你可在命令行里运行一个node项目,假设node index.js可以跑起来一个项目:

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

你也可以写成一个json,比如一个 app.json:

{"apps": {"name": "node-app",script: "node","args": ["index"]}
}

然后通过 json 去启动项目:

pm2 start app.json

[仅限Linux]假设你的项目通过npm脚本npm start运行:

pm2 start -name "node-app" npm -- start

windows上你必须指定script为 "npm-cli"的路径,比如:

pm2 start -n "node-app" "D:\\ProgramSoftware\\nvm\\v16.17.1\\node_modules\\npm\\bin\\npm-cli.js" -- run start

不过会弹出一个无法隐藏的cmd黑框,如果你不介意的话那就这样
或者通过 cmd 去执行命令:

pm2 start -n "node-app" cmd -- /c npm start

也可以把执行命令包装成一个js脚本,然后让pm2 执行这个脚本:

const {exec} = require('child_process');
const pros = exec("mvn org.springframework.boot:spring-boot-maven-plugin:run -Dspring-boot.run.jvmArguments='-Dfile.encoding=UTF-8'",{cwd: process.cwd()});
pros.stderr.on('error', err => console.error(`${err}`));
pros.stdout.on('data', (data) => {console.log(`${data}`);
});
pros.on('error', (err) =>{console.error(`${err}`);
})
pros.on('close', (code) => {console.log(`child process exited with code ${code}`);
}); 

启动其它语言项目

pm2不仅仅可以启动 node 项目,其它语言的项目也能支持!比如 java:
终端式:

pm2 start -n "java-app" java -- -jar example-0.0.1.jar

Json式:

{"apps": {"name": "java-app",script: "java","args": ["-jar","example-0.0.1.jar"]}
}

Js式(可以通过pm2 init快速生成):

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

除了这几种,其它诸如 yml 等格式也支持。
不过需要避坑的一点是,script本质是这个可执行程序的地址,比如在pm2运行时,假设 java.exe 位于 C:\jdk\bin下,实际执行的是:

C:\JDK\BIN\JAVA -jar example-0.0.1.jar

你需要注意的是这整个路径被大写了,但并不是所有语言都支持大写,比如rust:

'CARGO' is not valid proxy name, th valid names are 'cargo', 'rustc'...

对于这种,你必须直接指定完整的路径,正如npm那边一样:

{//..."script": "C:\\Users\\GrapeX\\.cargo\\bin\\cargo.exe"
}

同样会弹出一个无法隐藏的cmd黑框
或者你有办法在系统环境中持久的指定 CARGO 等效于 cargo,笔者目前还没有找到这种方法

管理应用

对于一个已经存在与 pm2 中的应用,你可以对他进行停止、重启等操作。

  • 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,我们甚至不需要额外的下载注册服务的工具

  1. 首先保存 pm2 应用:
pm2 save
  1. 注册开机自启服务
    Linux:
pm2 startup [--service-name <name>]

Windows: 需要先安装pm2-windows-startup

npm i pm2-windows-startup -g

然后安装服务:

pm2-startup install
  1. 禁用开机自启
    Linux:
pm2 unstartup

Windows:

pm2-startup uninstall

应用监控

  • 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: 'node-app1',script: './sv1/index.js',watch: './sv1',namespace: 'node-demo'}, {name: 'node-app2',script: './sv2/index.js',watch: './sv2',namespace: 'node-demo'}]
};

负载均衡

当一个应用启动模式为 cluster 时,会自动开启负载均衡

静态服务器

是的,你没看错,pm2 还能充当静态服务器:

pm2 serve <path> <port>

或者通过配置文件:

module.exports = {script: "serve",env: {PM2_SERVE_PATH: '.',PM2_SERVE_PORT: 8080}
}

应用部署

PM2 具有简单但功能强大的部署系统,允许在生产环境中配置和更新应用程序。当您想一次在一台或多台服务器上的裸机服务器上部署应用程序时,这非常有用。详见:https://pm2.fenxianglu.cn/docs/general/deployment-system


http://www.ppmy.cn/news/429353.html

相关文章

Mac查看电池健康情况、电池损耗的方法

Mac查看电池健康情况、电池损耗的方法 1.很简单输入一行命令 ioreg -rn AppleSmartBattery | grep -i capacity 1 2.得到如下电池信息 可知&#xff1a;设计容量为5088&#xff0c;当前最大可用容量为4152&#xff0c;当前电量为4152&#xff08;已充满电&#xff09;&…

苹果Mac如何优化电池续航能力?

苹果Mac电脑电池续航能力取决于电脑配置和用户使用电脑的方式。可以采用如下一些设置和步骤来尽可能延长电脑电池的续航能力。 一、查看电池偏好设置 “系统偏好设置”中的“电池”面板提供了有助于延长 Mac 笔记本电脑电池续航能力的设置。要查看电池设置&#xff0c;可以进…

如何在Mac笔记本电脑上查看电池用量历史记录及电池状态?

通过“用量历史”可以查看 Mac 笔记本电脑的电池电量、Mac 的能耗使用情况和屏幕打开的时长。您可以检查过去 24 小时或过去 10 天的历史记录。 在Mac笔记本电脑上查看电池用量历史记录 1.选取苹果菜单 >“系统偏好设置”。 2.点按“电池”。 3.然后点按“用量历史”。 …

macbook电池怎么使用?MacBook怎样检查电池健康程度

现在越来越多的小伙伴入手了macbook&#xff0c;可是面对心爱的macbook&#xff0c;真心不知道该如何呵护它&#xff01;接下来小编就为大家科普一下MacBook电池健康程度的检查和macbook电池使用的几点建议&#xff0c;呵护您的macbook,先从电池开始了解&#xff01; 电池完全充…

MacBook-air-2017更换电池

mac在2018的暑假购入&#xff0c;到现在过去整整三年&#xff0c;没想到突然在上个月电池损坏了。 电脑经历了一次低电量自动关机后再充满电第二天电池损坏。mac内部电池无法蓄电&#xff0c;且只有在连接充电线时才能开机&#xff0c;断接充电线电脑会出现自动黑屏的情况。 …

查询电脑电池容量以及循环次数

这个方法好像只对win10有效。 首先&#xff0c;运行-cmd进入界面。 输入Powercfg/batteryreport 回车 会显示电池使用报告的保存路径&#xff0c;找到打开就可以了。

Macbook充电和电池保养的标准答案

今早和朋友谈到Macbook &#xff08;我俩都是rMBP 15”)充电的问题&#xff0c;他提到看过苹果官方视频&#xff0c;其中提到Macbook充电1000个循环的问题。所以他平时都是插着电源用电脑&#xff0c;就怕循环一次少一次。而我又是那种见不得桌面上一堆线的人&#xff0c;所以每…

几种常见的7号电池的容量

几种常见的7号电池的容量 转载自&#xff1a;http://bbs.5itx.com/thread-116321-1-1.html 7号电池从性质上分&#xff0c;包括一次7号电池和二次7号电池&#xff0c;7号电池容量也因此被分为一次7号电池容量和二次7号电池容量 可做成7号外形的一次电池分为碳性电池和碱性电…