zoukankan      html  css  js  c++  java
  • pm2笔记

    概述

    pm2是一个进程管理工具。使用pm2部署NodeJS服务可以轻松实现负载均衡。

    指定用户启动

    pm2启动时会指定一个PM2_HOME目录,作为存放日志文件、rpc.sock文件,默认情况下会PM2_HOME指向$HOME/.pm2文件夹,使用其他用户启动pm2时,除非另外指定,否则该环境变量仍然会指向当前用户的家目录下的文件夹,从而会出现Permission denied错误。可以在使用pm2命令前设定该变量:

    PM2_HOME='/path/to/.pm2' pm2 start app.js
    

    线上服务通常并不直接使用可登陆用户运行pm2,而是使用一个不具备登陆权限的用户来启动程序。假如要使用www作为服务的启动者,可以通过sudo -u + 用户名来实现:

    sudo -u www pm2 PM2_HOME='/path/to/.pm2' start app.js
    

    通过文件配置

    通过命令行输入参数来启动服务往往不够直观,pm2支持多种格式的配置文件件。pm2提供了自动生成配置文件模版的便捷命令:

    pm2 ecosystem
    

    生成模版和选项echosystem.config.js:

    module.exports = {
      apps : [{
        name: 'API',
        script: 'app.js',
    
        // Options reference: https://pm2.io/doc/en/runtime/reference/ecosystem-file/
        args: 'one two',
        instances: 1,
        autorestart: true,
        watch: false,
        max_memory_restart: '1G',
        env: {
          NODE_ENV: 'development'
        },
        env_production: {
          NODE_ENV: 'production'
        }
      }],
    
      deploy : {
        production : {
          user : 'node',
          host : '212.83.163.1',
          ref  : 'origin/master',
          repo : 'git@github.com:repo.git',
          path : '/var/www/production',
          'post-deploy' : 'npm install && pm2 reload ecosystem.config.js --env production'
        }
      }
    };
    

    配置文件分为两个部分:appsdepoly,其中deploy与远程部署有关。
    json格式的配置文件与js格式类似,只是缺少module.exports=输出的代码。需要说明的是,如果是自己创建js配置文件,其后缀必须是config.js
    相关的配置项已经在文末参考中列出。其中比较重要的有几项:

    • cwd:执行script命令时的路径
    • env:默认的环境变量列表
    • env_production:以env_开头的环境变量列表,可以在pm2启动时通过--env选项进行选择

    远程部署

    pm2不仅支持本地启动,还可以批量远程部署服务。有了pm2,只要写好配置文件,就可以轻松远程部署,这方面跟python的fabric作用相当。

    常用命令

    	$ npm install pm2 -g     # 命令行安装 pm2 
    	$ pm2 start app.js -i 4  # 后台运行pm2,启动4个app.js 
    							 # 也可以把'max' 参数传递给 start
    							 # 正确的进程数目依赖于Cpu的核心数目
    	$ pm2 start app.js --name my-api # 命名进程
    	$ pm2 list               # 显示所有进程状态
    	$ pm2 monit              # 监视所有进程
    	$ pm2 logs               # 显示所有进程日志
    	$ pm2 stop all           # 停止所有进程
    	$ pm2 restart all        # 重启所有进程
    	$ pm2 reload all         # 0 秒停机重载进程 (用于 NETWORKED 进程)
    	$ pm2 stop 0             # 停止指定的进程
    	$ pm2 restart 0          # 重启指定的进程
    	$ pm2 startup            # 产生 init 脚本 保持进程活着
    	$ pm2 web                # 运行健壮的 computer API endpoint (http://localhost:9615)
    	$ pm2 delete 0           # 杀死指定的进程
    	$ pm2 delete all         # 杀死全部进程
    

    例子

    	$ pm2 start app.js -i max    # 根据有效CPU数目启动最大进程数目
    	$ pm2 start app.js -i 3      # 启动3个进程
    	$ pm2 start app.js -x        #用fork模式启动 app.js 而不是使用 cluster
    	$ pm2 start app.js -x -- -a 23   # 用fork模式启动 app.js 并且传递参数 (-a 23)
    	$ pm2 start app.js --name serverone  # 启动一个进程并把它命名为 serverone
    	$ pm2 stop serverone       # 停止 serverone 进程
    	$ pm2 start app.json        # 启动进程, 在 app.json里设置选项
    	$ pm2 start app.js -i max -- -a 23                   #在--之后给 app.js 传递参数
    	$ pm2 start app.js -i max -e err.log -o out.log  # 启动 并 生成一个配置文件
    	你也可以执行用其他语言编写的app  ( fork 模式):
    	$ pm2 start my-bash-script.sh    -x --interpreter bash
    	$ pm2 start my-python-script.py -x --interpreter python
    

    参考

  • 相关阅读:
    Spring Cloud Bus 消息总线介绍
    工商银行分布式服务 C10K 场景解决方案
    关于写好文章的3个心法和5点技巧
    混合云K8s容器化应用弹性伸缩实战
    云原生下的灰度体系建设
    被解救的代码
    【2020-10-22】我是否一个真正靠谱的人
    【2020-10-21】以谦虚与忍耐去期待豁然与贯通
    【2020-10-20】压力也是一种感受,用心体会
    【2020-10-19】不断试错的过程
  • 原文地址:https://www.cnblogs.com/zhangjpn/p/8463817.html
Copyright © 2011-2022 走看看