先说一些废话

之前学习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 testcross-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~ :)
转发请注明参考文章地址,非常感谢!!!