首页
学习
活动
专区
圈层
工具
发布

` `yarn run start`命令的`PM2`是什么?

PM2 是一个 ​​Node.js 应用的生产环境进程管理器​​,而 yarn run start 是一个 ​​通过 Yarn 运行项目脚本的命令​​。两者属于不同的工具,但常在 Node.js 项目部署中配合使用。以下是详细解释:


​1. PM2 是什么?​

​PM2(Process Manager 2)​​ 是一个专为 Node.js 设计的​​进程管理工具​​,用于在生产环境中​​保持应用持续运行​​、​​自动重启崩溃的进程​​、​​负载均衡​​等。它的核心功能包括:

功能

说明

​​进程守护​​

保持应用长期运行,即使崩溃或服务器重启也会自动恢复。

​​负载均衡​​

多实例运行(集群模式),充分利用多核 CPU。

​​日志管理​​

集中管理应用日志,支持日志轮转和远程查看。

​​零停机重启​​

更新代码时无需停机,逐步重启进程(reload 命令)。

​​监控与性能分析​​

实时监控资源占用(CPU、内存等),提供性能分析工具。

​常见 PM2 命令示例​

代码语言:javascript
复制
pm2 start app.js          # 启动应用
pm2 list                  # 查看运行中的进程
pm2 logs                  # 查看日志
pm2 restart app_name      # 重启应用
pm2 stop app_name         # 停止应用
pm2 delete app_name       # 删除进程

​2. yarn run start 是什么?​

这是通过 ​​Yarn​​(JavaScript 包管理器)运行项目中定义的 start 脚本的命令。它的行为取决于项目根目录下的 package.json 文件中 scripts 字段的配置。例如:

​典型的 package.json 配置​

代码语言:javascript
复制
{
  "scripts": {
    "start": "node server.js",  # 定义 start 脚本为运行 node server.js
    "dev": "nodemon server.js"  # 开发环境脚本(通常带热重载)
  }
}
  • 执行 yarn run start 时,Yarn 会调用 node server.js 启动应用。

​3. PM2 和 yarn run start 的关系​

两者通常结合使用,但角色不同:

  • yarn run start​: 是开发或部署时​​启动应用的命令​​,具体行为由 package.json 定义(如 node server.jsreact-scripts start)。
  • ​PM2​​: 是​​生产环境的进程管理器​​,用于托管通过 yarn run start(或其他方式)启动的应用,确保其稳定运行。

​典型生产环境部署流程​

  1. ​用 Yarn 启动应用​​(开发或测试):yarn run start
  2. ​用 PM2 托管应用​​(生产环境):pm2 start yarn --name "my-app" -- interpret "yarn run start" 或更常见的直接运行 Node.js 脚本:pm2 start server.js --name "my-app"

​4. 为什么生产环境推荐用 PM2?​

直接运行 yarn run start(或 node server.js)的问题:

  • ​进程崩溃​​:如果应用意外退出,服务器不会自动重启它。
  • ​单点故障​​:无法利用多核 CPU,性能受限。
  • ​无监控​​:难以跟踪资源占用或日志。

PM2 的解决方案:

  • ​自动恢复​​:崩溃后自动重启。
  • ​集群模式​​:启动多个实例(如 pm2 start server.js -i max)。
  • ​日志集中管理​​:避免日志散落在终端或文件中。

​5. 常见误解澄清​

  • ​PM2 不是 Yarn 的替代品​​: Yarn 是包管理器,负责安装依赖和运行脚本;PM2 是进程管理器,负责托管应用。
  • yarn run start 可以单独使用​​: 在开发环境中直接运行即可,但生产环境建议用 PM2 托管。

​6. 完整生产部署示例​

假设项目结构如下:

代码语言:javascript
复制
my-app/
├── package.json
└── server.js

​步骤 1:用 Yarn 启动(开发环境)​

代码语言:javascript
复制
yarn install      # 安装依赖
yarn run start    # 启动应用(执行 package.json 中的 "start" 脚本)

​步骤 2:用 PM2 托管(生产环境)​

代码语言:javascript
复制
pm2 start yarn --name "my-app" --interpret "yarn run start"
# 或更直接的方式:
pm2 start server.js --name "my-app" --watch  # 监听文件变化自动重启

​步骤 3:常用 PM2 管理命令​

代码语言:javascript
复制
pm2 list              # 查看进程状态
pm2 logs my-app       # 查看日志
pm2 restart my-app    # 重启应用
pm2 save              # 保存当前进程列表到配置文件
pm2 startup           # 设置开机自启
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Thread类的run()和start()方法的区别

    1、线程的start()方法   start()方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码: 通过调用Thread类的start()方法来启动一个线程...然后通过此Thread类调用方法run()来完成其运行操作的,这里方法run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程终止,而CPU再运行其它线程。...Thread-0---1 Thread-0---2 Thread-0---3 Thread-1---1 Thread-1---2 Thread-1---3 2、线程的run()方法   run()方法当作普通方法的方式调用...Thread-1---1 Thread-1---2 Thread-1---3 总结   调用start方法方可启动线程,而run方法只是thread的一个普通方法调用,还是在主线程里执行。...这两个方法应该都比较熟悉,把需要并行处理的代码放在run()方法中,start()方法启动线程将自动调用 run()方法,这是由jvm的内存机制规定的。

    34730

    thread类中start()和run()方法的区别

    1,start()方法来启动线程,真正实现了多线程运行,这时无需等待。...run方法体代码执行完毕而直接继续执行下面的代码: 通过调用Thread类的start()方法来启动一个线程,这时此线程是处于就绪状态,并没有运行。...然后通过此Thread类调用方法run()来完成其运行操作的,这里方法run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程终止,而CPU再运行其它线程。...3,调用start方法方可启动线程,而run方法只是thread的一个普通方法调用,还是在主线程里执行。...这两个方法应该都比较熟悉,把需要并行处理的代码放在run()方法中,start()方法启动线程将自动调用 run()方法,这是由jvm的内存机制规定的。

    4.1K00

    面试题:Thread的start和run的区别

    t.run(); //调用run方法 //调用执行 current main thread is main task run..... task thread is : main 换成调用方法t.start...(),执行 current main thread is main task run..... task thread is : Thread-0 小伙伴们是否已经知道他们的区别了 1、run方法就是个普通的方法...2、start方法被main线程调用,但执行task()方法并不是main线程。 源码分析 知道了run和start的区别,我们来看看start方法源码 ?...start0映射的方法就是JVM_StartThread,我们再看一下jvm.cpp文件中JVM_StartThread方法,里面有段代码 ? 在看下thread_entry方法 ?...就是在thread_entry方法中调用run方法 总结 start方法中的基本流程 ? 小伙伴们看到这里,是不是感觉这个面试题很简单呢?

    94110

    深入线程Thread类的start()方法和run()方法

    每个线程都是通过某个特定Thread对象所对应的方法run()来完成其操作的,方法run()称为线程体。通过调用Thread类的start()方法来启动一个线程。...如果一个线程的run方法执行结束或者调用stop方法后,该线程就会死亡。对于已经死亡的线程,无法再使用start方法令其进入就绪。...二、start()方法 1、为什么需要start方法;它的作用是什么? start()方法来启动线程,真正实现了多线程运行。 start方法的作用就是将线程由NEW状态,变为RUNABLE状态。...三、run( )方法 1、run方法又是一个什么样的方法?run方法与start方法有什么关联?...方法的执行是不是需要线程调用start()方法 上面说了,run()方法是一个普通的对象方法,因此,不需要线程调用start()后才可以调用的。

    3.1K00

    cross-env使用yarn start报错:sh 不是内部或外部命令

    今天新拉的一个项目,在 yarn 安装完依赖后,执行启动命令 yarn start 报错 'sh' 不是内部或外部命令,也不是可运行的程序,详细报错信息如下: yarn run v1.22.21 $ cross-env...NODE_OPTIONS=--max_old_space_size=12000 COMPRESS=none umi dev 'sh' 不是内部或外部命令,也不是可运行的程序 或批处理文件。...error Command failed with exit code 1. info Visit https://yarnpkg.com/en/docs/cli/run for documentation...查看 package.json 的启动命令,使用了 cross-env : "start": "cross-env NODE_OPTIONS=--max_old_space_size=12000 COMPRESS...解决方法: 删除项目 yarn.lock 文件 清除 yarn 缓存: yarn cache clean 重新安装依赖: yarn 启动项目: yarn start 也可以尝试全局安装 cross-env

    40010

    cross-env使用yarn start报错:sh 不是内部或外部命令

    今天新拉的一个项目,在 yarn 安装完依赖后,执行启动命令 yarn start 报错 'sh' 不是内部或外部命令,也不是可运行的程序,详细报错信息如下: yarn run v1.22.21 $ cross-env...NODE_OPTIONS=--max_old_space_size=12000 COMPRESS=none umi dev 'sh' 不是内部或外部命令,也不是可运行的程序 或批处理文件。...error Command failed with exit code 1. info Visit https://yarnpkg.com/en/docs/cli/run for documentation...查看 package.json 的启动命令,使用了 cross-env : "start": "cross-env NODE_OPTIONS=--max_old_space_size=12000 COMPRESS...解决方法: 删除项目 yarn.lock 文件 清除 yarn 缓存: yarn cache clean 重新安装依赖: yarn 启动项目: yarn start 也可以尝试全局安装 cross-env

    31410

    PM2快速入门

    安装 可通过NPM或Yarn安装最新的PM2版本: $ npm install pm2@latest -g # or $ yarn global add pm2 要安装Node.js和NPM,可以使用NVM...启动一个应用 启动,守护和监视应用程序的最简单方法是使用以下命令行: $ pm2 start app.js 或轻松启动任何其他应用程序: $ pm2 start bashscript.sh $ pm2...要解决此问题,只需运行以下命令即可生成活动的启动脚本: $ pm2 startup 并保存自动重生的进程列表: $ pm2 save 在此处阅读有关启动脚本生成器的更多信息。...更新PM2 我们简化了流程,各个版本之间没有重大变化,过程也很简单: npm install pm2@latest -g 然后更新内存中的PM2: pm2 update 备忘单 以下是一些值得了解的命令...pm2 start app.js --no-vizion pm2 start app.js --no-autorestart 下一步是什么?

    1.6K10

    Ubuntu下安装Yarm-PM2

    https://www.yarnpkg.com/zh-Hant/ (一)yarn的官方安装方法:   1、上通过 Debian 套件安裝 Yarn,粘贴以下命令 curl -sS https://dl.yarnpkg.com...(二)安装PM2   1、我们执行以下命令,对pm2进行一个全局安装: npm install vue-cli pm2 -g   2、安装完成我们运行上一篇写的server.js.   ...这里说一下,通过node命令跑起来的js一但进程关闭或意外结束,我们就不能继续访问了。所以我们需要通过pm2来增加稳定性。 pm2 start server.js 运行成功后效果图如下: ?...如果到这里都成功的话就不用往下看了,如果pm2 安装失败,继续往下看。 之前我在ubuntu14.04上配置环境的时候一直出错,最后研究出了一套命令,可以正常安装,大家自行测试。...最后记录以下常用的一些pm命令: pm2 restart server   //重启pm2服务器 pm2 stop server //停止pm2服务器 pm2 start xxxx.js

    1K40
    领券