返回顶部
首页 > 资讯 > 服务器 >PM2入门及其常用命令
  • 839
分享到

PM2入门及其常用命令

服务器运维linux 2023-09-25 08:09:01 839人浏览 独家记忆
摘要

文章目录 一、PM2概述1、简介2、普通 node 进程的缺陷3、PM2优点4、PM2安装 二、PM2命令详情1、PM2常用命令1.1 启动1.2 管理进程1.3 应用信息查看1.4 日志

文章目录

一、PM2概述

1、简介

进程管理主要是指创建,终止和监控进程。进程管理器主要是用来确保你的应用在启动后能够保持在线

pm2 是 nodejs 的进程管理器,默认支持负载均衡,能够守护进程。还支持查看应用运行时的性能,资源占用情况等

2、普通 node 进程的缺陷

  • 普通启动方式:node index.js,关闭终端就结束进程
  • node 进程挂掉和“僵死”:
    • 进程挂掉大概有以下几种原因:
      • 内存泄漏:内存一点点积累到达临界值爆掉
      • 死循环导致内存突增爆掉
      • 死循环导致磁盘写爆
      • 被动被kill,主动退出。
    • “僵死”大概有以下几种可能:
      • 有某个非常耗时的cpu操作正在执行
      • 写了个死循环(死循环不一定会导致服务挂掉,有可能只会cpu飙升,让服务处于假死状态)

不管发生上面哪种情况,都会造成服务的不可访问,需要等我们自己去发现问题后,然后重启应用。

3、PM2优点

  • 后台运行:普通启动方式:node index.js,关闭终端就结束进程;pm2可以后台运行,终端关闭不影响
  • 自动重启:在应用意外挂掉或者机器重启后,能够自动重启应用;可以监听某些文件改动,自动重启
  • 停止不稳定的进程:限制不稳定的重启的次数,达到上限就停止进程
  • 自动负载均衡:支持集群模式,会自动使用轮询的方式达到负载均衡,可以方便的启动多个node进程,充分利用cpu和内存
  • 0 秒停机重启:集群模式下,可以达到重启时不停止服务
  • 简单日志管理:pm2可以收集日志,并有插件配合进行管理
  • 提供实时的接口:pm2插件提供实时的接口,返回服务器与进程的信息
  • 可以监控应用性能,资源占用情况等,自动输出日志
  • 开发模式支持热更新
  • 集成管理:对于多个进程,不同环境,可以统一配置,方便管理

4、PM2安装

# 没有nodejs的需要首先安装# 安装地址Http://nodejs.cn/download/# 有问题wget https://nodejs.org/dist/v18.14.2/node-v18.14.2-linux-x64.tar.xztar -xvf node-v18.14.2-linux-x64.tar.xzmv node-v18.14.2-linux-x64 /usr/local/cd /usr/local/nodejs/bin./node -v# 全局sudo vim /etc/profileexport NODE_HOME=/usr/local/nodeexport PATH=$NODE_HOME/bin:$PATHsource /etc/profile#安装pm2npm install pm2 -g

二、PM2命令详情

1、PM2常用命令

快速入门https://pm2.keymetrics.io/docs/usage/quick-start/

1.1 启动

# pm2有两种模式,开发模式和生产模式# 开发 node 应用的时候,修改代码过后每次都要重启下应用,很麻烦。使用 pm2-dev 命令启动应用,应用会在在代码发生变更过后,自动重启pm2-dev start server.js# 应用部署到生产环境后,可以使用 pm2 start 来启动应用,命令启动的应用,默认支持进程守护,并且可以通过 pm2 进行监控pm2 start server.js# 启动指定应用,如pm2 start index.js --name httpServer;pm2 start <script_file|config_file> [options]# 支持不同文件格式pm2 start app.jspm2 start bashscript.shpm2 start python-app.pypm2 start binary-filepm2 start "npm run start"pm2 start "ls -la"pm2 start app.py# 设置启动应用的显示名称pm2 start app.js --name <app_name># 监控应用目录,一旦有文件发生更改就立刻重启应用pm2 start app.js --watch# 指定日志输出目录pm2 start app.js --log <log_path># 设置应用重启时,能使用内存的最大值pm2 start app.js --max-memory-restart <200MB># 启动时,传递参数给 app 应用pm2 start app.js -- arg1 arg2 arg3# 禁止自动重启应用pm2 start app.js --no-autorestart# 定时任务。可以设置 一天中的固定重启时间, 一周内固定重启日期,或者 一个时间间隔(如 每 48 小时重启一次)# cron_pattern参考:https://www.npmjs.com/package/cronpm2 start app.js --cron <cron_pattern># 固定延时重启,这里的2000单位为毫秒,即在需要重启的时候等待两秒钟pm2 start --restart-delay=2000# 灵活延时,重试时间会随着重试次数增多不断延长# 此处的1000单位也是毫秒,PM2会在多次重启失败后以设定的时间为初始值,使用指数移动平均算法不断延长重试时间,最高为15000毫秒(即15秒),并在进程成功启动30秒后重置重试时间到到初始值pm2 start --exp-backoff-restart-delay=1000# 静态服务器,将目录dist作为静态服务器根目录,端口为9090pm2 serve ./dist 9090

1.2 管理进程

app_name 的位置除了传应用名,还可以传:

  • all 针对所有进程进行操作
  • id 针对特定id的进程进行操作

集群模式下,restart中断服务,而reload不会

# ------------------------------重启、重载、停止、删除------------------------# 停止指定应用,如pm2 stop httpServer;# 也可以执行他目录下得 pm2-start.sh 脚本里面用. pm2-start.sh 执行输入0就可以关闭在执行得脚本# (app_name|app_id|all)pm2 stop [options] # 重启指定应用,如pm2 restart httpServer;pm2 reload|restart [options] # 显示指定应用详情,如pm2 show httpServer;pm2 show [options] # 删除指定应用,如pm2 delete httpServer,如果修改应用配置行为,最好先删除应用后,重新启动方才生效,如修改脚本入口文件;pm2 delete [options] # 重置 restart 的计时器pm2 reset all  # 杀掉pm2管理的所有进程;pm2 kill # 保存并恢复PM2进程pm2 update

1.3 应用信息查看

#----------------------------查看运行状态-------------------------# 查看所有进程信息(app_name、app_id等)pm2 [list|ls|status]# 对应用进行排序查看pm2 list --sort name:desc# Orpm2 list --sort [name|id|pid|memory|cpu|status|uptime][:asc|desc]  # 查看某个应用详情pm2 describe app_name|app_id# 查看应用详情信息pm2 show app_name|app_id# 清除保存的应用列表pm2 cleardump# 保存当前应用列表,以后可以恢复pm2 save  # 同 pm2 dump# 重新加载之前保存的应用列表pm2 resurrect

运行pm2 list的命令后,可以查看所有 pm2 启动的应用

  • id:应用 id
  • name:应用名称
  • namespace:在配置文件里面可以给应用设置 namespace。设置后可以使用命令行单独启动或停止某个 namespace 的应用
  • mode: 进程的运行方式。分为 forkcluster
  • pid:进程id
  • uptime:运行时间
  • :重启次数(从0开始计数)
  • status:进程是否在线
  • cpu:cpu占用率
  • mem:内存占用大小

pm2 show app_name|app_id查看应用详情信息,除了 pm2 list 命令返回的信息以外,还可以获取几个常用信息

  • script path:启动入口的文件路径
  • script args:启动文件的参数
  • error log path:错误日志的文件路径
  • out log path:输出日志的文件路径
  • exec mode:进程的模式
  • watch&reload:是否开启监听文件变动重启
  • unstable restarts:不稳定的重启次数

1.4 日志与监控

# 查看指定应用的日志,即标准输出和标准错误;pm2 logs [options] [id|name|namespace] pm2 logs# 还可以直接进入日志保存的目录查看# 监控各个应用进程cpu和memory使用情况pm2 monit # 查看所有命令pm2 --help#orpm2 -h

2、集成部署EcosystemFile

官方参考:https://pm2.keymetrics.io/docs/usage/application-declaration/

2.1 概述

当我们需要管理多个应用,或者应用有多个运行环境时,使用 pm2 start 来启动应用+配置参数是很不方便的。所以,pm2 支持使用配置文件来启动和管理应用。

# 生成配置文件pm2 init simple# 运行该命令可在工程下初始化一个 ecosystem.config.js 配置文件module.exports = {  apps : [{    name   : "app1",    script : "./app.js"  }]}# apps是要管理应用的数组,每个对象都是一个应用的配置# 你也可以自己创建一个配置文件,文件名以 .config.js 结尾,pm2 会自动识别并读取该文件# Start all applicationspm2 start ecosystem.config.js# Stop allpm2 stop ecosystem.config.js# Restart allpm2 restart ecosystem.config.js# Reload allpm2 reload ecosystem.config.js# Delete allpm2 delete ecosystem.config.js

2.2 配置项详解

基础配置

  • name:进程名
  • script:node 启动文件的路径
  • cwd :项目所在的目录
  • args :通过命令行传递给node启动文件的参数
  • interpreter :编译器的绝对路径(默认 node )
  • interpreter_args :传给编译器的参数
  • node_args:传给 node 的参数

进阶配置

  • instances :应用启动实例个数,仅在cluster模式有效
  • exec_mode :应用程序启动模式。可选 clusterfork,默认为 fork
  • watch :是否启用监控模式,默认是 false。如果设置成 true,当应用程序变动时,pm2会自动重载
  • ignore_watch :不用监听的文件,如
ignore_watch: [   'node_modules',   'logs',]
  • max_memory_restart :应用运行内存达到设定值后,会自动重启。避免了 node.js heap out of memory error 问题

  • env :应用中的默认环境变量

  • env_ :命令行中可传入的环境变量,覆盖默认环境变量

  • source_map_support :默认 true,支持 sourcemap 文件

日志配置

  • log_date_fORMat :日志时间格式
  • error_file :错误日志存放路径
  • out_file :全部日志存放路径
  • combine_logs:是否将不同 id 的进程日志合并
  • merge_logs:同上

控制流

  • min_uptime:应用被视为已启动最小运行时间
  • max_restarts: 在应用状态被认定为 error 前,一定时间(min_uptime 指定的时间,若未配置,则为 1 秒)内的连续不稳定重启次数
# 以上两个配置项一般需要同时设置,以下举个例子# server.jssetTimeout(function () {    console.log('killed');    process.exit(1)}, 1000);# ecosystem.config.jsmodule.exports = {  apps: [{    name: "app-market",    script: "./server.js",    max_restarts: 4,    min_uptime: 5000,  }]}# server 应用在启动 1s 后,会自己强行结束进程。这时, pm2 由于进程守护的特性,会去重新拉起应用。# 示例中设置了 min_uptime 为 5000(即 5s),max_restarts 为 4 次,所以 pm2 在进程停止(1s)后去重启进程,5s 钟可以内重启次数肯定可以达到 4 次。达到设定次数后,则停止重启应用
  • listen_timeout:如果应用没有发送 ready 信号,间隔多长时间 reload。单位为毫秒。
  • wait_ready:是否等待进程发送 ready 信号。默认为 false。设置为 true 后,需要在应用内部添加 process.send('ready') 语句发送 ready 信号。

以上两个配置项一般需要搭配使用,详细使用场景见 优雅的启动与停止应用

  • kill_timeout:从告诉进程要关闭到强制关闭进程的间隔时间。
module.exports = {  apps : [{    name: 'app',    script: './app.js',    kill_timeout: 3000  }]}

当 pm2 要停止或重启一个应用时,会按顺序给你的进程发送一系列系统信号。它首先会发送一个 SIGINT 信号告诉你应用将会被停止。然后 pm2 会等待 3s(示例中 kill_timeout 设置的时间)。若 3s 后应用没有自己停止(exit),pm2 会发送一个 SIGKILL 信号来强制停止应用。优雅停止

  • estart_delay:进程掉线后,等待多长时间自动重启, 默认 0s
  • autorestart: 是否开启自动重启。默认开启。
  • cron_restart: 定时重启。可以设置 一天中的固定重启时间一周内固定重启日期,或者 一个时间间隔(如 每 48 小时重启一次)cron_pattern 请参照这里

2.3 使用配置文件

# 启动、停止、重启、重载、删除配置文件中所有项目pm2 start ecosystem.config.jspm2 stop ecosystem.config.jspm2 restart ecosystem.config.jspm2 reload ecosystem.config.jspm2 delete ecosystem.config.js# 启动指定应用pm2 start   ecosystem.config.js --only api-apppm2 start   ecosystem.config.js --only "api-app,worker-app"

3、集群模式

https://pm2.keymetrics.io/docs/usage/cluster-mode/

3.1 cluster 模式与 fork 模式

  • fork 模式 :fork 模式使用最基本的进程运行方式,只是单实例运行server,无法实现 tcp 连接共享。并且我们知道 javascript 代码是运行在单线程上的,换句话说一个 Node.js 进程只能运行在一个 CPU 上。那么如果用 Node.js 来做 WEB Server,就无法享受到多核运算的好处
  • cluster 模式:集群模式允许 nodejs 应用程序在所有可用的 CPU 上进行扩展,而无需修改任何代码。可以显著提高应用程序的性能和可靠性,具体取决于可用的 CPU 数量。在底层,它使用了 Node.js 集群模块,这样扩展后的应用程序的子进程可以自动共享服务器端口。要了解更多信息,请参阅 Node.js 集群

3.2 集群的使用

# 命令行启动# max 的意思是:把应用部署到服务器所有可用的CPU上,并运行尽可能多的进程pm2 start app.js -i max# 通过配置文件启动module.exports = {  apps : [{    script    : "app.js",    instances : "max",    exec_mode : "cluster"  }]}# 注意:pm2 的负载均衡的特性是建立在以集群模式启动的基础上的,默认的启动模式是 fork,不支持负载均衡# 集群模式下,由于 pm2 的 restart 命令会先杀掉所有进程,再重新拉起,会造成服务终止。# 但是 reload 命令可以实现 0s 重启,维护升级的时候不需要停机。当重载时间过长或者无法重载时,pm2 会自动切换成 restartpm2 reload app.js        #重新启动所有进程,始终保持至少一个进程在运行pm2 gracefulReload all   #优雅地以群集模式重新加载所有应用程序

**-i**后面的数字说明

  • 0/max :开启进程数量 == cpu核数量
  • -1:进程数量 == cpu核数量 - 1

3.3 动态扩展

# 如果希望在运行中动态增加实例数,可以使用下面的命令pm2 scale <app_name> +4 # add 4 additional workers in realtime

4、PM2其他进阶

4.1 日志输出

https://pm2.keymetrics.io/docs/usage/log-management/

# 只要通过PM2 启动的Node.js项目,可以非常方便的查看其输出日志# 显示所有应用的实时日志pm2 logs# 显示 api 应用的日志pm2 logs api# JSON格式显示所有应用的日志pm2 logs --json# 显示1000行 big-api 的日志pm2 logs big-api --lines 1000# 用仪表盘显示所有应用pm2 monit# 输出日志加上时间pm2 start app.js --timepm2 restart app --time# 默认日志的路径HOME/.pm2/logs# 查看日志命令的可用选项pm2 logs -h# 启动应用时,怎么初始化日志相关信息pm2 start app.js [OPTIONS]-l --log [path]              specify filepath to output both out and error logs-o --output <path>           specify out log file-e --error <path>            specify error log file--time                       prefix logs with standard formated timestamp--log-date-format <format>   prefix logs with custom formated timestamp--merge-logs                 适用 cluster mode# cluster mode 中,让所有进程日志都写进同一个日志# 命令启动,加上选项pm2 start app.js -i max --merge-logs <具体日志文件># 配置文件中,设置属性:merge_logs: true# 不需要输出日志module.exports = {    apps: [{        name: 'Business News Watcher',        script: 'app.js',        instances: 1,        out_file: "/dev/null",        error_file: "/dev/null",        cron_restart: '0 0 * * *',        [...]    }]}# 清除所有应用的日志pm2 flush# 清除 api 应用的日志pm2 flush <api># 日志文件的大小,以及日志保存多久等功能需要额外插件支持:pm2 install pm2-logrotate

4.2 监控模式实时更新

https://pm2.keymetrics.io/docs/usage/restart-strategies/

# 监控项目目录下所有文件,任意文件有改动,就自动重启 node.js 项目# 用 pm2 启动 node.js 项目,项目目录下有文件改动就重启pm2 start app.js --watch# 现在就可以正常访问 node.js 项目了,且可以查看项目状态pm2 listpm2 log# --ignore-watch 可以去除一些不需要监控的目录或文件# 监控除了  node_modules 目录以外文件pm2 start app.js --watch --ignore-watch="node_modules"# 配置文件中设置监控的方法# 监控和忽略具体文件module.exports = {    script: "app.js",    // 监控这两个文件夹    watch: ["server", "client"],    // 监控时间间隔    watch_delay: 1000,    // 忽略这两个文件夹    ignore_watch: ["node_modules", "client/img"],}# 监控项目目录下所有文件module.exports = {    script: "app.js",    watch: true}# --------------------------restart 与 reload 区别-----------# restart 会杀掉现有进程 并 启动新进程,服务会中断;# reload 不会杀掉现有进程,在现有进程重新加载,服务不会中断# 只有 app_name 这个应用被reloadpm2 reload <app_name># 配置文件中所有应用都被reloadpm2 reload process.json# 只有配置文件中的api应用被reloadpm2 reload process.json --only api

4.3 PM2自启动

https://pm2.keymetrics.io/docs/usage/startup/

# 当服务器意外崩溃重启后,Node.js要能够自启动,恢复服务# 1、创建启动脚本pm2 startup# 2、上面命令会输出类似如下提示,按照提示执行[PM2] Init System found: systemd[PM2] To setup the Startup Script, copy/paste the following command:sudo env PATH=$PATH:/usr/local/nodejs/bin /usr/local/nodejs/lib/node_modules/pm2/bin/pm2 startup systemd -u shawn --hp /home/shawn# 3、保存正在运行的应用到启动脚本pm2 save# 现在可以重启服务器,看看 node.js 项目是否能自启动# 恢复上一次保存的自启动列表pm2 resurrect# 取消自启动pm2 unstartup# 当 node.js 版本更新时,请一定要卸载并新建 自启动脚本 pm2 unstartuppm2 startup# 如果我们还希望PM2中的进程能随着PM2启动而启动,就需要每次在新增或删除进程后执行pm2 save# 自动加入重启# 我们对进程的变更将会被即时保存到~/.pm2/dump.pm2中,无需手动执行pm2 savepm2 set pm2:autodump true

4.4 环境变量隔离

https://pm2.keymetrics.io/docs/usage/environment/

# 生成配置文件,pm2 init simple# 生成默认配置文件:ecosystem.config.jsmodule.exports = {  apps : [{    name   : "app1",    script : "./app.js"  }]}# 添加环境变量配置module.exports = {    apps: [{        name: "app1",        script: "./app.js",        env: {            "ip": "192.168.1.2",            "NODE_ENV": "development"        },        env_production: {            "ip": "192.168.1.1",            "NODE_ENV": "production",        }        env_develop: {            "ip": "192.168.1.2",            "NODE_ENV": "develop",        }    }]}

调用环境变量

  • env默认环境变量,只要启动应用:pm2 start ecosystem.config.js ,那么 ip 变量就会被传递给应用 app1
  • env_production对应调用方式是:pm2 start ecosystem.config.js --env production
  • env_develop对应调用方式是:pm2 start ecosystem.config.js --env develop
  • 规则是 :配置文件中定义 env_开头的属性,那么就用 --env参数调用。

--update-env: 更新环境变量

NODE_ENV=production pm2 restart web-interface --update-env

4.5 多服务器管理

https://pm2.keymetrics.io/docs/usage/deployment/

在 node.js 项目部署发布时,经常用 ssh 分别连接多台服务器,对每一台服务器都要执行 git pull 最新代码,编译启动应用的操作,操作琐碎且容易忘记其中某些操作。pm2 可以很好解决这个问题,只需一个命令就可以自动完成,还能实时监控、查看 node.js 应用的运行情况

第一步:服务器环境配置

第二步:开发机器环境配置

// node.js 项目操作步骤配置,注意修改对应的信息// pm2 init 等同于 pm2 ecosystem,可以生成带有 deploy 属性的配置文件:ecosystem.config.jsmodule.exports = {    apps : [{        name      : 'API',      //应用名        script    : 'app.js',   //应用文件位置        env: {            PM2_SERVE_PATH: ".",    //静态服务路径            PM2_SERVE_PORT: 8080,   //静态服务器访问端口            NODE_ENV: 'development' //启动默认模式        },        env_production : {            NODE_ENV: 'production'  //使用production模式 pm2 start ecosystem.config.js --env production        },        instances:"max",          //将应用程序分布在所有CPU核心上,可以是整数或负数        watch:true,               //监听模式        output: './out.log',      //指定日志标准输出文件及位置        error: './error.log',     //错误输出日志文件及位置,pm2 install pm2-logrotate进行日志文件拆分        merge_logs: true,         //集群情况下,可以合并日志        log_type:"json",          //日志类型        log_date_format: "DD-MM-YYYY",  //日志日期记录格式    }],    deploy : {        production : {            user : 'node',                      //ssh 用户            host : ["192.168.0.13", "192.168.0.14", "192.168.0.15"],              //ssh 地址            ref  : 'origin/master',             //GIT远程/分支            repo : 'git@GitHub.com:repo.git',   //git地址            path : '/var/www/production',       //服务器文件路径            post-deploy : 'npm install && pm2 reload ecosystem.config.js --env production'  //部署后的动作        }    }};

最后执行命令

# pm2 连接服务器,通知其 git clone 代码等初始化工作pm2 deploy production setup# 启动 或 更新 node.js 项目# 让服务器 git pull 代码,编译后启动应用# --force 的作用:如果服务器本地代码有改动,那么放弃改动,用git仓库最新代码更新项目pm2 deploy production --force;

下面说一下命令详解

# 命令格式# 如果配置文件名是:ecosystem.config.js或者 pm2.config.js,上面命令可以不用写 pm2 deploy <configuration_file> <environment> <command># 此命令就是默认寻找 ecosystem.config.js  或  pm2.config.js  配置文件执行pm2 deploy production setup# 在配置文件中设定 env_production和 env_development,就可以在执行命令时调用,把环境变量传递给node.js 项目# pm2 deploy production --force;module.exports = {    apps: [{        script: 'index.js',        watch: '.',        env_production: {            NODE_ENV: "production"        },        env_development: {            NODE_ENV: "development"        }    }],}# commandsetup                  run remote setup commandsupdate                 update deploy to the latest releaserevert[n]             revert to[n]th last deployment or 1curr[ent]              output current release commitprev[ious]             output previous release commitexec | run < cmd >     execute the given < cmd >list                   list previous deploy commits[ref]                  deploy to[ref], the "ref" setting, or latest tag # exec可以让所有服务器执行一次命令pm2 deploy production exec "pm2 reload all"# 回滚到上一个部署版本pm2 deploy production revert 1# 部署的几个时间点"pre-setup"         : "在setup执行前 运行的 命令或脚本","post-setup"        : "在代码clone完成后 执行的命令或脚本","pre-deploy"        : "pm2 startOrRestart ecosystem.json --env production","post-deploy"       : "pm2 startOrRestart ecosystem.json --env production","pre-deploy-local"  : "echo 'This is a local executed command'"# 操作多台服务器,只需修改host,单台就一个"host" : ["212.83.163.1", "212.83.163.2", "212.83.163.3"],# -------------------------------报错解决---------------------------npm: command not foundpost-deploy hook failedDeploy failed# pm2 部署时,出现上面错误,但运行 npm -v都是正常的,原因是 pm2 的配置文件,按照下面步骤即可解# 1、打开终端$ cd ~$ nano .bashrc# 2、把下面内容注释掉#If not running interactively, don 't do anythingcase $ - in*i * );;*) return;;esac# 3、更新环境变量$ source .bashrc

4.6 PM2 开启文件服务

https://pm2.keymetrics.io/docs/usage/expose/

# --------------------------------1---------------------------# 假设 ~/test目录下有一个 test.txt文件# 开启文件服务器,默认端口是8080,可以根据需要修改pm2 serve ~/test 8080# 浏览器访问http://localhost:8080/test.txt# --------------------------------2---------------------------# 假设 ~/test目录下有一个 test.txt文件# 1、切换到共享目录cd ~/test# 2、新建配置文件 : ecosystem.config.jspm2 init simple# 3、修改配置文件为如下内容module.exports = {    apps: [{        name: "serve",        script: "serve",        env: {            PM2_SERVE_PATH: '.',            PM2_SERVE_PORT: 8080        }    }]}# 4、启动服务pm2 start ecosystem.config.js   #或者pm2 start# 5、浏览器访问http://localhost:8080/test.txt# --------------------------------3---------------------------# 假设共享目录有index.html 文件,文件内容如下。访问共享目录时,默认打开 index.html<!DOCTYPE html><html><head>    <meta charset="utf-8">    <title>pm2 serve</title></head><body>    <h1>Welcome</h1>    <p>这是 pm2 服务器!</p></body></html># ---------命令行启动# 1、切换到共享目录cd ~/test# 2、启动服务pm2 serve --spa# 3、访问http://localhost:8080# ---------配置文件启动# 1、切换到共享目录cd ~/test# 2、新建配置文件 : ecosystem.config.jspm2 init simple# 3、修改配置文件为如下内容module.exports = {    apps: [{        name: "serve",        script: "serve",        env: {            PM2_SERVE_PATH: '.',            PM2_SERVE_PORT: 8080,            PM2_SERVE_SPA: 'true'        }    }]}# 4、启动服务pm2 start ecosystem.config.js #或者pm2 start# 5、浏览器访问http://localhost:8080# --------------------------------4---------------------------# 使用用户名和密码来访问服务# --------------命令行启动# 1、切换到共享目录cd ~/test# 2、启动服务,用户名:username,密码:passWordpm2 serve --basic-auth-username username --basic-auth-password password# 3、浏览器访问(需要输入上面用户名和密码)http://localhost:8080# --------------配置文件启动# 1、切换到共享目录cd ~/test# 2、新建配置文件 : ecosystem.config.jspm2 init simple# 3、修改配置文件为如下内容module.exports = {    apps: [{        name: "serve",        script: "serve",        env: {            PM2_SERVE_PATH: '.',            PM2_SERVE_PORT: 8080,            PM2_SERVE_BASIC_AUTH: 'true',            PM2_SERVE_BASIC_AUTH_USERNAME: 'username',            PM2_SERVE_BASIC_AUTH_PASSWORD: 'password'        }    }]}# 4、启动服务pm2 start ecosystem.config.js #或者pm2 start# 5、浏览器访问(需要输入上面用户名和密码)http://localhost:8080

5、Docker 集成

Supervisor是用python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启,这是另一种监控后台的方式,详情可以参考:Supervisor+Dockerfile编译jdk镜像

#在容器中安装 pm2RUN npm install pm2 -g# 直接启动应用CMD ["pm2-runtime", "app.js"]# 通过配置文件启动CMD ["pm2-runtime", "ecosystem.config.js"]

**注意:在容器中使用 pm2 启动应用时,要使用 pm2-runtime 而不是 pm2 start, 因为:**pm2 是默认后台启动的, docker 感知不到。CMD 命令执行完成,docker 容器就结束了。 所以直接使用 node app.js 启动应用后,应用能一直在容器中保持运行。 pm2 以后台形式运行,CMD 命令执行完成,docker 就认为可以退出了。所以需要使用 pm2-runtime 来进行处理。pm2-runtime 是为 Docker 容器设计的,它将应用程序置于前台,从而使容器保持运行状态


https://pm2.keymetrics.io/docs/usage/quick-start/

https://www.jianshu.com/p/02af8c5261e5

https://blog.csdn.net/leonnew/article/details/121989900

https://blog.csdn.net/fanlehai/article/details/121014685

来源地址:https://blog.csdn.net/lemon_TT/article/details/130018781

--结束END--

本文标题: PM2入门及其常用命令

本文链接: https://lsjlt.com/news/417239.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • PM2入门及其常用命令
    文章目录 一、PM2概述1、简介2、普通 node 进程的缺陷3、PM2优点4、PM2安装 二、PM2命令详情1、PM2常用命令1.1 启动1.2 管理进程1.3 应用信息查看1.4 日志...
    99+
    2023-09-25
    服务器 运维 linux
  • Redis入门及常用命令学习
    Redis简介 Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。 Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存中的数据保存在磁盘中...
    99+
    2014-06-16
    Redis入门及常用命令学习
  • Go语言基础入门应用简介及常用命令
    目录Go语言简介Go语言的主要特点【重点】Go语言应用Go语言中常用命令Go语言中可见性规则【重点】 Go语言简介 Go 是一门开源、支持并发、垃圾回收的编译型系统编程语言从 200...
    99+
    2024-04-02
  • 如何理解Go语言基础入门应用及常用命令
    本篇文章给大家分享的是有关如何理解Go语言基础入门应用及常用命令,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Go语言简介Go 是一门开源、支持并发、垃圾回收的编译型系统编程语...
    99+
    2023-06-25
  • mongodb入门命令
    1: mongo入门命令 1.1: show dbs 查看当前的数据库 (admin是管理相关的,用户操作、安全配置等需要切换到该数据库下。local放其他数据库的信息。test自己随意。)1.2 us...
    99+
    2024-04-02
  • mariadb常用的客服端及其服务端命令
    一、安装MariaDB及其配置步骤   1)创建存放数据目录及其用户mkdir -pv /mydata/datagroupadd -r mysql   useradd...
    99+
    2024-04-02
  • Redis入门基础常用操作命令整理
    目录Redis基础一、redis是单线程二、关于数据库的常用操作1. 默认数据库2. 切换数据库3. 查看数据库大小4. 清空数据库三、关于Redis-Key的常用操作1. set ...
    99+
    2024-04-02
  • windows常用命令及相关命令
    目录 一、cmd的打开方式 二、windows常用命令 三、网络操作命令 四、系统操作命令 五、用户与管理 六、查看自己的本机重要信息 七、windows命令之mysql授权 一、cmd的打开方式 任务栏搜索框里输入cmd能打开 在文档...
    99+
    2023-09-06
    windows 服务器 运维 网络安全 网络
  • lspci 命令详解及常用命令
    lspci命令用于显示计算机的PCI总线信息,包括PCI设备的厂商、设备ID等。常用的lspci命令参数如下:- -v:显示详细的信...
    99+
    2023-09-09
    lspci
  • MySQL入门--如何调用命令行命令
    如何调用命令行命令( mysql\mysqldump\mysqladmin\mysqlimport ) Ø    mysql  是通用的命令行客...
    99+
    2024-04-02
  • 新手入门级linux系统常用命令大全
    linux命令学习是大多数新手的最大障碍,今天为大家分享一些Linux系统下常用的基础命令,linux常用命令全集 Linux系统信息命令 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(...
    99+
    2022-06-04
    linux系统常用命令大全 linux常用命令全集
  • git 使用及常用命令
    git在团队项目中的使用流程 1.首先从一个git远程仓库中clone项目到本地 git clone 仓库地址 2.创建开发分支 一般我们写代码不会在master分支上面写,而是新建一个分支 gi...
    99+
    2022-06-04
    常用命令 git
  • MySQL数据库基础入门之常用命令小结
    本文实例讲述了MySQL数据库基础入门之常用命令。分享给大家供大家参考,具体如下: 接上一篇:MySQL数据库主从同步实战过程 mysql命令介绍 mysql 是数据库管理命令 通过mysql --help来查看相关...
    99+
    2022-05-18
    MySQL 数据库 常用命令
  • Linux——常用命令大汇总(带你快速入门Linux)
    纵有疾风起,人生不言弃。本文篇幅较长,如有错误请不吝赐教,感谢支持。 💬文章目录 一.终端和shell命令解析器终端和shell命令解析器概述终端提示符的格式常用快捷键 ...
    99+
    2023-09-07
    linux 运维 服务器 笔记 网络
  • Redis入门基础常用操作命令实例分析
    今天小编给大家分享一下Redis入门基础常用操作命令实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Redis基础Re...
    99+
    2023-06-30
  • MySQL常用命令及操作
    1、登录与退出     1)登录         windows下直接在DOS命令窗口用root用户登录输入my...
    99+
    2022-05-15
    MySQL 命令 操作
  • zookeeper:简介及常用命令
    目录 一、Zookeeper简介 二、Zookeeper服务端常用命令 1、启动ZooKeeper服务 2、查看ZooKeeper服务状态 3、停止ZooKeeper服务 4、重启ZooKeeper服务 三、Zookeeper客户端常用命...
    99+
    2023-10-03
    java-zookeeper zookeeper 大数据
  • Mysql安装及常用命令
    1、下载安装 下载连接:https://downloads.mysql.com/archives/community/ 解压后配置环境变量 1.1、初始化Mysql mysqld --initiali...
    99+
    2023-10-23
    mysql 数据库 sql
  • Linux下常用的网络命令及其使用方法是什么
    Linux下常用的网络命令及其使用方法是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Linux下常用的网络命令及其使用方法hostnamehostname 没有选项,...
    99+
    2023-06-28
  • mysql常用sql与命令之从入门到删库跑路
    启动与停止 启动mysql服务 sudo /usr/local/mysql/support-files/mysql.server start 停止mysql服务 sudo /usr/local/mysql/su...
    99+
    2022-05-29
    mysql 入门 sql命令
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作