PM2学习日志(2)

767 阅读3分钟

进程描述文件

Ecosystem File

生态系统文件又或者叫进程描述文件,允许通过文件调整每个进程的行为、选项、环境变量、日志等对基于微服务的应用非常有帮助

支持的配置格式有 JavascriptJSONYAML

PM2支持通过Clipm2 init或者 pm2 ecosystem 生成实例文件,为node模块的格式。具体实例如下

module.exports = {
  apps : [
    {
      name: 'API', // 应用名称
      script: 'app.js', // 执行脚本

      // Options reference: https://pm2.keymetrics.io/docs/usage/application-declaration/
      args: 'one two', // 启动参数
      instances: 1, // 实例数,PM2内置负载均衡,可以开启多个实例
      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'
    }
  }
};

显然一次可以配置多个进程的具体描述

编辑完进程描述文件就可以通过Cli启动 需要注意的是使用Javascript配置需要以.config.js结尾

pm2 [start|restart|stop|delete] ecosystem.config.js

通过参数可以调整启动的动作,下面介绍具体的参数

  • --only <app-name,...> 只启动指定名称的应用,可以指定多个
  • --env 允许切换系统的运行环境,这在分别部署测试,预生产,生产之类需要环境区分的场景下非常有用。例如

完整的参数如下

-- 基础参数
name: 应用名称|String (app)
script: 脚本路径|String (app.js)
cwd: 工作目录|String (/var/www)
args: 参数|Array,String (--port, --env)
interpreter: 脚本的解释器路径|String (/var/jre/java, /var/python/python)
interpreter_args: 脚本解释器的参数|Array (--Xmx)

-- 高级参数
instances: 实例数|number (1,2,3...)
exec_mode: 执行方式|String (fork, cluster)
watch: 启动监视文件或者目录变化自动重启|boolean (true, false)
ignore_watch: 指watch需要忽略的目录或者文件|Array,String (node_modules)
max_memory_restart: 最大重启内存阈值|String (150M,200M)
env: 环境变量|Object ({NODE_ENV:'dev', port: 8080})
source_map_support: 源代码支持|boolean (true, false)
instance_var: 实例变量|String
filter_env: 过滤运行环境|Array (["REACT_"])

-- 日志
log_date_format: 日志日期格式|Strin (yyyy-MM-dd)
error_file: 错误文件路径|String (/var/logs/xxxerror.log)
out_file: 日志输出路径|String (/var/logs/xxx.log)
combine_logs: 组合日志|boolean (true,false)
merge_logs: 合并日志|boolean (true, false)
pid_file: pid文件路径|String (/var/xxx/app.pid)

-- 控制相关 
min_uptime: 最小正常运行时间|String 
listen_timeout: 监听启动延迟|number 多少毫秒后启用监听
kill_timeout: 关闭进程延迟|number 多少毫秒后关闭进程
shutdown_with_message: 通过消息关闭|boolean pm2通过 process.send(‘shutdown’) 发送通知,具有关闭由应用控制
wait_ready: pm2等待应用发送process.send(‘ready’)启动
max_restarts: 最大连续重启次数|number 最大重启次数,超过不再尝试启动应用
restart_delay: 重启延迟|number 重启延迟多少毫秒后执行
autorestart: 自动重启|boolean (true, false)
cron_restart: 定时重启|String 通过cron表达式控制应用的重启时间

管理非NODE进程

看到这里如果您细心的话,一定发现。貌似PM2不止可以管理和守护NODE应用,

事实上PM2的确可以跨语言执行进程,比如JAVA, 下面是一个小例子,通过PM2管理Eureka

  • 通过CLI命令行启动
pm2 start java -- -jar eureka.jar --server.port=8088 --name=eureka
  • 通过进程描述文件
module.exports = {
  name: 'eureka', // 应用名称
  /**
   * 执行脚本,需要注意的是非Node应用需要在script指定执行的解释器
   * 示例指定全路径, 如果环境变量已经配置过了直接指定java就可以了
   */
  script: '/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home/bin/java',
  /**
   * 启动参数
   * 执行eureka.jar
   * 监听端口8088
   */
  args: '-jar eureka.jar --server.port=8088'
}

通过脚本执行后可以通过 pm2 status 或者 pm2 list 检查应用的健康状况

下载.jpeg

或者比较直观的可以通过pm2内置的监视器实时监测

下载 1.jpeg
可以看到Eureka已经启动
下载 3.jpeg

PM2 PLUS

PM2团队也推出了在线的管理平台PM2 PLUS,可以方便的查看PM2进程的运行情况,免费版提供远程重启,停止,查看日志等功能

专业与商业版支持在线的远程构建

参考资料

Ecosystem-File

PM2-plus