pm2:node进程管理工具

本文介绍了PM2,一个Node.js进程管理器,它支持快速启动应用、监控文件变化、管理应用实例、日志管理以及环境部署,包括自动重启、环境切换等功能。

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

  1. pm2 -version 查看版本
  2. pm2 start app.js --name name 启动并命名为name,没有命名的话后续可以用id替代name
    pm2 start app.js --name name运行自己顶名称的进程
    pm2 start app.js --watch 当文件变化时自动重启应用
    pm2 start yarn -- run  运行yarn命令,-- 后是相关scripts;也可以使用npm
    
  3. pm2 list 查看所有启动的应用列表
  4. pm2 monit 显示每个应用程序的CPU和内存占用情况
  5. pm2 show [app-id/app-name] 显示指定应用程序的所有信息
  6. pm2 log 显示应用程序的日志信息
  7. pm2 log [app-id/app-name] 显示指定应用程序的日志信息
  8. pm2 flush 清空所有日志文件
  9. pm2 stop all 停止所有应用程序
  10. pm2 stop [app-id/app-name] 停止指定应用程序
  11. pm2 restart all 重启所有应用程序
  12. pm2 restart [app-id/app-name] 重启指定应用程序
  13. pm2 delete all 关闭并删除所有应用程序
  14. pm2 delete [app-id/app-name] 删除指定的应用程序
  15. pm2 reset [app-id/app-name] 重置重启数量
  16. pm2 startup 创建开机自启动命令
  17. pm2 save 保存当前应用列表
  18. pm2 resurrect 重新加载保存的应用列表
  19. pm2 update 保存进程,杀死并重启进程,一般用于更新pm2版本
  20. pm2 ecosystem 生成一个示例json配置文件,运行配置文件pm2 start ecosystem.config.js --env production
  • 基础类
    • name:进程名
    • script:node启动文件的路径
    • cwd :项目所在的目录
    • args :通过命令行传递给node启动文件的参数
    • interpreter :编译器的绝对路径(默认node)
    • interpreter_args :传给编译器的参数
    • node_args:传给node的参数
  • 进阶类
    • instances :进程数
    • exec_mode :进程的模式(cluster或fork)
    • PS: cluster模式利用node的child_process模块孵化多个子进程,主进程监听端口,子进程只和主进程通信,从而达到单个端口多个进程;通过轮转方式实现负载均衡
    • watch :布尔值或文件数组,允许开启监听文件改动重启
    • ignore_watch :不监听的文件
    • max_memory_restart :超过该内存就自动重启
    • env :应用中的默认环境变量
    • env_ :命令行中可传入的环境变量,覆盖默认环境变量
    • source_map_support :默认true,支持sourcemap文件
  • 日志类
    • log_date_format :日志时间格式
    • error_file :错误日志存放路径
    • out_file :全部日志存放路径
    • combine_logs:是否将不同id的进程日志合并
    • merge_logs:同上
  • 控制流
    • min_uptime :pm2认为进程在线的最小时长
    • listen_timeout :如果app没有发送ready信号,间隔多长时间reload
    • kill_timeout :从告诉进程要关闭到强制关闭进程的间隔时间
    • wait_ready:是否等待进程发送ready信号
    • max_restarts :最大不稳定重启次数(不稳定指的是小于1s或者小于的min_uptime重启)
    • restart_delay:进程掉线后,等待多长时间重启
    • autorestart: 是否开启自动重启
    • 配置项实践中需要注意的内容
    • script:若使用cluster模式,必须是启动文件入口,不可通过npm启动
    • max_restarts:指不稳定重启,即小于1s或
    • min_uptime的重启,要结合
    • min_uptime配置才起效
    • listen_timeout:当cluster模式时,这个值要大于一个进程启动所需时间,否则reload时会造成短暂的服务不可用
    module.exports = {
      // apps是一个json结构的数组 ,每一个数组成员对应一个pm2中运行的应用
      apps : [
        {
          // 应用程序名称
          name: 'nuxt-snow',
          // 执行文件
          script: 'index.js',
          // 应用程序所在的目录
          cwd: './',
          // 传递给脚本的参数
          args: '',
          // 指定的脚本解释器
          interpreter: '',
          // 传递给解释器的参数
          interpreter_args: '',
          // 是否启用监控模式,默认是false。如果设置成true,当应用程序变动时,pm2会自动重载。这里也可以设置你要监控的文件。
          watch: true, // watch: './',
          // 不用监听的文件
          ignore_watch: [
            'node_modules',
            'logs'
          ],
          // 应用程序启动模式,这里设置的是 cluster_mode(集群),默认是fork
          exec_mode: 'fork',
          // 应用启动实例个数,仅在cluster模式有效 默认为fork;或者 max
          instances: 1,
          // 最大内存限制数,超出自动重启
          max_memory_restart: 8,
          // 自定义应用程序的错误日志文件(错误日志文件)
          error_file: './logs/app-err.log',
          // 自定义应用程序日志文件(正常日志文件)
          out_file: './logs/app-out.log',
          // 设置追加日志而不是新建日志
          merge_logs: true,
          // 指定日志文件的时间格式
          log_date_format: 'YYYY-MM-DD HH:mm:ss',
          // 最小运行时间,这里设置的是60s即如果应用程序在* 60s内退出,pm2会认为程序异常退出,此时触发重启 max_restarts设置数量,应用运行少于时间被认为是异常启动
          min_uptime: '60s',
          // 设置应用程序异常退出重启的次数,默认15次(从0开始计数),最大异常重启次数,即小于min_uptime运行时间重启次数;
          max_restarts: 10,
          // 启用/禁用应用程序崩溃或退出时自动重启,默认为true, 发生异常的情况下自动重启
          autorestart: true,
          // 定时启动,解决重启能解决的问题,crontab时间格式重启应用,目前只支持cluster模式;
          cron_restart: '',
          // 异常重启情况下,延时重启时间
          restart_delay: '60s',
          // 环境配置
          // env: {
          //   // 公共变量
          //   COMMON_VARIABLE: true
          // },
          // 生产环境配置
          // $ pm2 start app.js --env
          env: {
            // 环境参数,当前指定为生产环境 process.env.NODE_ENV
            NODE_ENV: 'production',
            // 当前环境接口地址,如果不用可不配置 process.env.REMOTE_ADDR
            REMOTE_ADDR: 'http://www.abc.com/'
          },
          // 开发环境配置
          // $ pm2 start app.js --env_dev
          env_dev: {
            // 环境参数,当前指定为开发环境 process.env.NODE_ENV
            NODE_ENV: 'development',
            // 当前环境接口地址,如果不用可不配置 process.env.REMOTE_ADDR
            REMOTE_ADDR: 'http://www.abc.com/'
          },
          // 测试环境配置
          // $ pm2 start app.js --env_test
          env_test: {
            // 环境参数,当前指定为测试环境 process.env.NODE_ENV
            NODE_ENV: 'test',
            // 当前环境接口地址,如果不用可不配置 process.env.REMOTE_ADDR
            REMOTE_ADDR: 'http://www.abc.com/'
          }
        }
      ],
     
      // 环境部署
      deploy : {
      
        production : {
          // ssh的用户名,登录远程服务器的用户名
          user : 'snow',
          // 要发布的机器,远程服务器的IP或hostname,此处可以是数组同步部署多个服务器
          host : '10.0.0.0',
          // 服务器端口
          port : 3000,
          // 要发布的代码分支,远端名称及分支名
          ref  : 'origin/master',
          // 代码Git仓库地址
          repo : 'git@gitlab.dzm.net:dzm/nuxt-test',
          // 服务器存储代码地址,远程服务器部署目录,需要填写user具备写入权限的目录,也就是服务器存放上面git库代码的地方
          path : '/usr/local/var/www/production',
          // ssh权限配置
          // 'ssh_options': 'StrictHostKeyChecking=no',
          'ssh_options': ['StrictHostKeyChecking=no', 'PasswordAuthentication=no'],
          // 1、在 setup 前触发,如安装 git
          'pre-setup': '',
          // 2、在 setup 后触发,如做一些其他配置
          'post-setup': '',
          // 3、在 deploy 前触发,执行本地脚本
          'pre-deploy-local': '',
          // 4、在 deploy 前触发,执行远程脚本
          'pre-deploy': 'git fetch --all',
          // 5、在 deploy 后触发,执行远程脚本,如 npm install,部署后需要执行的命令
          // 'post-deploy' : 'npm install && pm2 startOrRestart ecosystem.config.js --env production',
          'post-deploy' : 'npm install && pm2 reload ecosystem.config.js --env production',
          // 环境变量
          'env'  : {
            // 指定为生成环境
            'NODE_ENV': 'production'
          }
        }
      }
    };
    
  1. 进程相关字段说明
    id // 进程id 标识作用 用于其他命令的指向
    name // 进程标识 用于其他命令的指向
    namespace // 环境名称 
    version // 版本
    mode //进程模式,cluster或fork。cluster有多个进程,而fork只有一个
    pid // 进程id  标识作用
    uptime // 运行时间
    ↺  // 重启次数
    status // 进程是否在线
    cpu // cpu的占用率
    mem // 内存占用大小
    user // 启动用户名 
    
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

局外人LZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值