pm2 使用指南

本文是对官方文档的总结
可以查看 官方文档 了解更多

常用命令

启动
  • 启动应用程序

    pm2 start index.js
    可以启动任何类型的应用程序,例如 bash 命令、脚本、二进制文件

    $ pm2 start "npm run start"
    $ pm2 start "ls -la"
    $ pm2 start app.py
    

    因为我是用的是阿里云的nodejs性能监控平台,所以使用了命令 pm2 start "ENABLE_NODE_LOG=YES npm run dev"

  • 启动并显示日志流
    $ pm2 start api.js --attach
    
重启
  • 重新启动应用程序
    $ pm2 restart index.js
    
  • 重新启动所有应用程序
    $ pm2 restart all
    
停止
  • 停止指定的应用程序
    $ pm2 stop api
    
  • 全部停止
    $ pm2 stop all
    
删除
  • 要停止和删除应用程序
    $ pm2 delete api
    
  • 要将它们全部删除
    $ pm2 delete all
    
列出应用程序
  • 列出所有正在运行的应用程序
    $ pm2 list
    # Or
    $ pm2 [list|ls|l|status]
    
显示应用程序元数据
$ pm2 show api

日志

  • 日志文件位于文件夹中$HOME/.pm2/logs
  • 显示日志
    pm2 logs
    
  • 指定日志的显示行数
    # Display 1000 lines of api log file
    pm2 logs big-api --lines 1000
    
  • 清空日志
    pm2 flush
    
    pm2 flush <api> # Clear the logs for the app with name/id matching <api>
    
  • 选项
    -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                 when running mutiple process with same app name, do not split file by id
    
  • 为日志添加日期前缀
    $ pm2 start app.js --time
    # Or a running app
    $ pm2 restart app --time
    
日志大小限制

模块pm2-logrotate使用有限的磁盘空间自动轮换并保留所有日志文件。

要安装它:

pm2 install pm2-logrotate

在此处阅读有关 pm2-logrotate 的更多信息

终端仪表盘

  • 监控应用程序的资源使用情况。您可以通过以下方式轻松直接地从终端监控内存和 CPU
    pm2 monit
    

配置文件

  • 生成配置文件
    $ pm2 init simple
    
  • 操作配置文件
    # Start all applications
    pm2 start ecosystem.config.js
    
    # Stop all
    pm2 stop ecosystem.config.js
    
    # Restart all
    pm2 restart ecosystem.config.js
    
    # Reload all
    pm2 reload ecosystem.config.js
    
    # Delete all
    pm2 delete ecosystem.config.js
    
项目中的配置文件
  • 以下的这个配置文件是我在项目中实际使用的,大家有需要的话可以参考
环境变量
  • env_*您可以通过选项指定不同的环境变量集
    module.exports = {
      apps : [{
        name   : "app1",
        script : "./app.js",
        // PM2 会覆盖当前环境来添加NODE_ENV=development
        // 默认环境是在env
        env: {
          // 可以访问到这个变量
          // process.env.PORT = 3000
          "PORT": 3000,
          "NODE_ENV": "development",
        }
        // 如果要使用这个环境可以使用
        // pm2 start ecosystem.config.js --env production
        env_production: {
           NODE_ENV: "production"
        }
      }]
    }
    
  • 现在要在不同环境中的变量之间切换,请指定--env [env name]选项
    pm2 start process.json --env production
    pm2 restart process.json --env development
    
重启策略
  1. 在指定的 CRON 时间重新启动应用程序
  2. 文件更改时重新启动应用程序
  3. 当应用程序达到内存阈值时重新启动
  4. 延迟启动和自动重启
  5. 默认情况下在崩溃或退出时禁用自动重启(应用程序始终使用 PM2 重启)
  6. 在特定的指数增长时间自动重启应用程序
  • 在指定的 CRON 时间重新启动应用程序
    module.exports = {
      apps : [{
        name: 'elm_node',
        script: 'ENABLE_NODE_LOG=YES node index.js',
        // 将出现在您的应用程序中的环境变量
        env: {
          NODE_ENV: 'development'
        },
        // 注入当做 pm2 restart app.yml --env
        env_production: {
          NODE_ENV: 'production'
        },
        // 监视更改
        watch: ["app.js", "ecosystem.config.js", "prototype", "config", "elmConfig.json", "middlewares", "controller", "index.js", "models", "mongodb", "routes"],
        // 指定监视间隔之间的延迟
        watch_delay: 1000,
        // 忽略的文件夹
        ignore_watch: ["node_modules", "logs", "yarn.lock", "public", "package.json", "README.md", "COPYING", "InitData", "package-lock.json"]
      }],
    };
    
  • 基于内存的重启策略

    如果发现请求完成之后内存并没有下来,闲置了几分钟后内存还没有下降,就说明内存一直没有释放,需要手动重启,释放内存

    module.exports = {
      apps : [{
        name: 'elm_node',
        script: 'ENABLE_NODE_LOG=YES node index.js',
        env: {
          NODE_ENV: 'development'
        },
        env_production: {
          NODE_ENV: 'production'
        },
        // 监视更改
        watch: ["app.js", "ecosystem.config.js", "prototype", "config", "elmConfig.json", "middlewares", "controller", "index.js", "models", "mongodb", "routes"],
        // 指定监视间隔之间的延迟
        watch_delay: 1000,
        // 忽略的文件夹
        ignore_watch: ["node_modules", "logs", "yarn.lock", "public", "package.json", "README.md", "COPYING", "InitData", "package-lock.json"]
        // 内存使用超过 300M 重启
        max_memory_restart: '300M'
      }],
    };
    
  • 完整配置
    module.exports = {
      apps : [{
        name: 'elm_node',
        script: 'ENABLE_NODE_LOG=YES node index.js',
        env: {
          NODE_ENV: 'development'
        },
        env_production: {
          NODE_ENV: 'production'
        },
        watch: ["app.js", "ecosystem.config.js", "prototype", "config", "elmConfig.json", "middlewares", "controller", "index.js", "models", "mongodb", "routes"],
        watch_delay: 1000,
        ignore_watch: ["node_modules", "logs", "yarn.lock", "public", "package.json", "README.md", "COPYING", "InitData", "package-lock.json"],
        max_memory_restart: '300M',
        restart_delay: 3000,
        exp_backoff_restart_delay: 100
      }]
    };
    
日志
  • 配置
    module.exports = {
      apps : [{
        name: 'elm_node',
        script: 'ENABLE_NODE_LOG=YES node index.js',
        env: {
          NODE_ENV: 'development'
        },
        env_production: {
          NODE_ENV: 'production'
        },
        // 重启策略
        watch: ["app.js", "ecosystem.config.js", "prototype", "config", "elmConfig.json", "middlewares", "controller", "index.js", "models", "mongodb", "routes"],
        watch_delay: 1000,
        ignore_watch: ["node_modules", "logs", "yarn.lock", "public", "package.json", "README.md", "COPYING", "InitData", "package-lock.json"],
        max_memory_restart: '300M',
        exp_backoff_restart_delay: 100,
        // 日志
        error_file: '/myproject/real_project/ELM_Node/logs/pm2/ELMerr.log',
        out_file: '/myproject/real_project/ELM_Node/logs/pm2/ELMout.log',
        pid_file: '/myproject/real_project/ELM_Node/logs/pm2/app-pm_id.pid',
        log_date_format: 'YYYY-MM-DD HH:mm Z'
      }]
    };
    
集群模式
  • 配置
    module.exports = {
      apps : [{
        name: 'elm_node',
        script: 'ENABLE_NODE_LOG=YES node index.js',
        env: {
          NODE_ENV: 'development'
        },
        env_production: {
          NODE_ENV: 'production'
        },
        // 重启策略
        watch: ["app.js", "ecosystem.config.js", "prototype", "config", "elmConfig.json", "middlewares", "controller", "index.js", "models", "mongodb", "routes"],
        watch_delay: 1000,
        ignore_watch: ["node_modules", "logs", "yarn.lock", "public", "package.json", "README.md", "COPYING", "InitData", "package-lock.json"],
        max_memory_restart: '300M',
        exp_backoff_restart_delay: 100,
        // 日志
        error_file: '/myproject/real_project/ELM_Node/logs/pm2/ELMerr.log',
        out_file: '/myproject/real_project/ELM_Node/logs/pm2/ELMout.log',
        pid_file: '/myproject/real_project/ELM_Node/logs/pm2/app-pm_id.pid',
        log_date_format: 'YYYY-MM-DD HH:mm Z',
        // max意味着 PM2 将自动检测可用 CPU 的数量并运行尽可能多的进程
        instances : "max"
      }]
    };
    
优雅的启动/停止
  • 优雅的停止
    在数据库连接的文件中加入这句话
    应用程序退出之前拦截SIGINT信号并清除所需的一切
    process.on('SIGINT', function() {
       db.stop(function(err) {
         process.exit(err ? 1 : 0)
       })
    })
    
  • 配置终止超时
    module.exports = {
      apps : [{
        name: 'app',
        script: './app.js',
        kill_timeout : 3000
      }]
    }
    
  • 优雅的开始
    在应用程序准备好之后发送 ready 信号
    var http = require('http')
    
    var app = http.createServer(function(req, res) {
      res.writeHead(200)
      res.end('hey')
    })
    
    var listener = app.listen(0, function() {
      console.log('Listening on port ' + listener.address().port)
      // Here we send the ready signal to PM2
      process.send('ready')
    })
    
  • 配置接收ready信号和就绪超时
    module.exports = {
      apps : [{
        name: 'app',
        script: './app.js',
        wait_ready: true,
        listen_timeout: 10000
      }]
    }
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
西门子pm125是一款高性能的电能质量分析仪器,使用手册提供了详细的操作指南以帮助用户正确地使用和维护设备。 在使用手册中,首先介绍了pm125的主要功能和特点。它具有测量和分析电能质量的能力,可以准确测量电压、电流、功率因数等参数,并提供报告和曲线图以帮助用户了解电能质量状况。此外,它还具有数据存储和传输功能,方便用户对数据进行后续分析和管理。 使用手册详细地说明了pm125的安装和操作步骤。用户需要先进行设备的安装,包括正确连接电源和测量点,并确保设备安放在稳定的环境中。接下来,手册介绍了设备的启动和校准步骤。用户需要按照手册中的指示进行相应的操作,并确保设备的准确性和稳定性。 手册还提供了pm125的功能和测量参数的详细说明。用户可以了解仪器如何进行电能质量的测量和分析,并根据自己的需求进行设置和调整。此外,手册还详细介绍了设备的各个配置选项和功能按钮的用途,以便用户能够灵活操作和控制设备。 对于设备的维护和故障排除,手册中也提供了相应的指导。用户可以了解如何进行设备的日常维护,包括定期的清洁和检查。如果出现故障或问题,手册中也提供了故障排除的流程和方法,以帮助用户尽快解决问题。 总之,西门子pm125使用手册为用户提供了全面的指导和支持,使他们能够正确、高效地操作和维护设备。用户可以通过仔细阅读和遵循手册中的指示,充分利用pm125的功能和特点,以确保电能质量的控制和改善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值