乐趣区

关于javascript:pm2-常用命令

先说一些废话

之前学习 Nodejs 我的项目的时候应用了 pm2 作为生产环境的过程管理工具,最近服务器崩了须要重启一些服务,发现有些命令记得不是特地分明,
所以这里写一篇文章帮忙本人记忆整顿一下 pm2 的常用命令,后续有须要查阅一下即可~

常用命令

  1. 进入 bin 目录启动:pm2 start www / pm2 start app.js
  2. pm2 start app.js --name="fx67ll" 启动并命名为 fx67ll,没有命名的话后续能够用 id 代替 name
  3. pm2 start app.js --watch 当文件变动时主动重启利用
  4. pm2 start script.sh 启动 bash 脚本
  5. pm2 list 查看所有启动的利用列表
  6. pm2 monit 显示每个应用程序的 CPU 和内存占用状况
  7. pm2 show [app-id/app-name] 显示指定应用程序的所有信息
  8. pm2 log 显示应用程序的日志信息
  9. pm2 log [app-id/app-name] 显示指定应用程序的日志信息
  10. pm2 flush 清空所有日志文件
  11. pm2 stop all 进行所有应用程序
  12. pm2 stop [app-id/app-name] 进行指定应用程序
  13. pm2 restart all 重启所有应用程序
  14. pm2 restart [app-id/app-name] 重启指定应用程序
  15. pm2 delete all 敞开并删除所有应用程序
  16. pm2 delete [app-id/app-name] 删除指定的应用程序
  17. pm2 reset [app-id/app-name] 重置重启数量
  18. pm2 startup 创立开机自启动命令
  19. pm2 save 保留以后利用列表
  20. pm2 resurrect 从新加载保留的利用列表
  21. pm2 update 保留过程,杀死并重启过程,个别用于更新 pm2 版本
  22. pm2 ecosystem 生成一个示例 json 配置文件
  23. 更多命令 能够参考 pm2 官网文档

应用平衡负载模式 (cluster mode) 的相干命令

  1. pm2 start app.js -i n 平衡负载模式 (cluster mode) 启动 n 个 app.js 利用实例
  2. pm2 reload all 重启平衡负载模式 (cluster mode) 下的所有利用
  3. pm2 gracefulReload all Graceful reload all apps in cluster mode
  4. pm2 scale [app-id/app-name] 10 将指定的应用程序拓展到 10 个实例

0 秒停机从新加载(集群模式下,能够达到重启时不进行服务)

  1. pm2 reload app.js 重新启动所有过程,始终保持至多一个过程在运行
  2. pm2 gracefulReload all 优雅地以集群模式从新加载所有应用程序

pm2 配置文件

生成示例配置文件

// 生成一个示例 json 配置文件
pm2 ecosystem
// pm2 初始化
pm2 init

配置项

  1. 根底类

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

    • instances:过程数
    • exec_mode:过程的模式(cluster 或 fork)
    • PS: cluster 模式利用 node 的 child_process 模块孵化多个子过程,主过程监听端口,子过程只和主过程通信,从而达到单个端口多个过程;通过轮转形式实现负载平衡
    • watch:布尔值或文件数组,容许开启监听文件改变重启
    • ignore_watch:不监听的文件
    • max_memory_restart:超过该内存就主动重启
    • env:利用中的默认环境变量
    • env_:命令行中可传入的环境变量,笼罩默认环境变量
    • source_map_support:默认 true,反对 sourcemap 文件
  3. 日志类

    • log_date_format:日志工夫格局
    • error_file:谬误日志寄存门路
    • out_file:全副日志寄存门路
    • combine_logs:是否将不同 id 的过程日志合并
    • merge_logs:同上
  4. 控制流

    • min_uptime:pm2 认为过程在线的最小时长
    • listen_timeout:如果 app 没有发送 ready 信号,距离多长时间 reload
    • kill_timeout:从通知过程要敞开到强制敞开过程的间隔时间
    • wait_ready:是否期待过程发送 ready 信号
    • max_restarts:最大不稳固重启次数(不稳固指的是小于 1s 或者小于的 min_uptime 重启)
    • restart_delay:过程掉线后,期待多长时间重启
    • autorestart:是否开启主动重启

    配置项实际中须要留神的内容

  5. script:若应用 cluster 模式,必须是启动文件入口,不可通过 npm 启动
  6. max_restarts:指不稳固重启,即小于 1s 或 min_uptime 的重启,要联合 min_uptime 配置才起效
  7. listen_timeout:当 cluster 模式时,这个值要大于一个过程启动所需工夫,否则 reload 时会造成短暂的服务不可用

配置文件示例

module.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 : '212.83.163.1',              //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'  // 部署后的动作
        }
    }
};

配置启动命令(package.json)

# pm2-server 工程的环境变量,目标是辨别各个环境的利用启动门路
# cross-env NODE_ENV=development

# pm2 的启动命令
# pm2 start pm2-conf/ecosystem.config.js

# 传递给 pm2 的参数,-- only  <name>,--env <env name>
# --only  detective  --env test

cross-env NODE_ENV=development   pm2 start pm2-conf/ecosystem.config.js   --only  detective  --env test

对于 pm2

pm2 是什么

pm2(Process Manager 2)是具备内置负载均衡器的 Node.js 应用程序的生产运行时和过程管理器。
它容许您永恒放弃应用程序沉闷,无需停机即可从新加载它们,并促成常见的 Devops 工作。

pm2 个性

  1. 后盾运行:一般启动形式:node index.js敞开终端就完结过程,pm2能够后盾运行,终端敞开不影响
  2. 日志治理:应用程序日志保留在服务器的硬盘中~/.pm2/logs/
  3. 负载平衡:pm2能够通过创立共享同一服务器端口的多个子过程来扩大您的应用程序,这样做还容许您以零秒停机工夫重新启动应用程序
  4. 终端监控:提供实时的接口,能够在终端中监控您的应用程序并查看应用程序运行状况(CPU 使用率,应用的内存,申请 / 分钟等)
  5. SSH 部署:主动部署,防止一一在所有服务器中进行ssh
  6. 动态服务:反对动态服务器性能
  7. 多平台反对:实用于Linux(稳固)和macOS(稳固)和Windows(稳固)
  8. 集成治理:对于多个过程,不同环境,能够对立配置,方便管理

pm2 装置

应用 npm 命令 npm install pm2 即可,配置项参考 npm 的形式

附录

参考资料

  1. 参考教程 ———— pm2 官网教程
  2. 参考文档 ———— PM2 常用命令
  3. 参考文档 ———— pm2 介绍及使用手册
  4. 参考文档 ———— pm2 入坑详解

我是 fx67ll.com,如果您发现本文有什么谬误,欢送在评论区探讨斧正,感谢您的浏览!
如果您喜爱这篇文章,欢送拜访我的 本文 github 仓库地址,为我点一颗 Star,Thanks~ :)
转发请注明参考文章地址,非常感谢!!!

退出移动版