安装 PM2

Linux

Windows

安装 pm2-windows-service

npm i -g pm2-windows-service

安装服务

将 PM2 注册成 Windows 服务

以管理员身份打开 CMD,运行 pm2-service-install

pm2-service-install

在安装后会有以下提示

? Perform environment setup (recommended)? (Y/n)

选择 n,此时,PM2 服务已经安装成功了

可以通过 win + r + services.msc 查看是否存在 PM2 服务

PM2 常用命令

# 启动应用程序
pm2 start ecosystem.config.js
# 还可以启动其他类型的应用程序,如 bash 命令、脚本、二进制文件
pm2 start "npm run start"
pm2 start "ls -la"
pm2 start app.py
# 启动并查看日志
pm2 start api.js --attach
# 在--之后传递的所有选项都将作为参数传递给应用程序
# 设置应用名称
pm2 start ecosystem.config.js --name app
# 监听模式(当文件发生变化,自动重启)
pm2 start ecosystem.config.js --watch

# 停止应用
pm2 stop [all | 应用ID | 应用名称]

# 删除应用
pm2 delete [all | 应用ID | 应用名称]

# 创建开机自启
pm2 startup

# 静态服务器(将目录 dist 作为静态服务器根目录,端口为 3000)
pm2 serve ./dist 3000

# 重新启动(同时杀死并重启所有进程,短时间内服务不可用)
pm2 restart [all | 应用ID | 应用名称]

# 0秒停机重新加载
pm2 reload [all | 应用ID | 应用名称]

# 优雅地以群集模式重新加载所有应用程序
pm2 gracefulReload all

# 查看启动列表
pm2 list

# 查看每个应用程序占用情况
pm2 monit

# 显示应用程序所有信息
pm2 show [all | 应用ID | 应用名称]

# 日志查看
pm2 logs [all | 应用ID | 应用名称]

# 保存当前应用列表
pm2 save

# 重启保存的应用列表
pm2 resurrect

# 清除保存的应用列表
pm2 cleardump

# 保存并恢复PM2进程
pm2 update

# 生成示例配置文件
pm2 init 或 pm2 ecosystem

配置文件

module.exports = {
  apps : [{
    // 应用程序名称(默认为不带扩展名的脚本文件名)
    name: 'app',
    // 相对于 pm2 start 的脚本路径
    script: 'index.js',
    // 将启动您的应用程序的目录
    cwd: '/var/www/',
    //     包含通过 CLI 传递给脚本的所有参数的字符串
    args: '-a 13 -b 12',
    // 解释器绝对路径(默认为 node)
    interpreter: '/usr/bin/java',
    // 传递给解释器的选项
    interpreter_args: '–harmony',
    // interpreter_args 的别名
    node_args: '–harmony',

    // 要启动的应用实例数量,可以是整数或负数
    instances: -1,
    // 启动应用程序的模式,可以是 cluster 或 fork,默认fork
    exec_mode: 'cluster',
    // 启用监视和重启功能,如果文件夹或子文件夹中的文件发生更改,您的应用程序将重新加载
    watch: true,
    // 通过监视功能忽略某些文件或文件夹名称的正则表达式列表
    ignore_watch: [“[\/\]./”, “node_modules”],
    // 如果超过指定的内存量,您的应用程序将重新启动。可以是“10M”、“100K”、“2G”等等……
    max_memory_restart: '150M'
    // 将出现在您的应用程序中的 env 变量
    env: {
        // 静态服务路径
        PM2_SERVE_PATH: ".",
        // 静态服务器访问端口
        PM2_SERVE_PORT: 3000,
        // 启动默认模式
        NODE_ENV: 'development'
    },
    //     在执行pm2时注入,pm2 restart app.yml --env
    env_production : {
        // 使用production模式 pm2 start ecosystem.config.js --env production
        NODE_ENV: 'production'
    },
    // 默认为 true,[enable/disable源映射文件]
    source_map_support: true,
    // 为每个启动的实例增加一个环境变量
    instance_var: 'NODE_APP_INSTANCE',
    // 排除以“REACT_”开头的全局变量,并且不允许它们渗透到集群中。
    filter_env: ['REACT_'],

    // 日志日期格式
    log_date_format: "YYYY-MM-DD HH:mm:ss",
    // 错误文件路径 (默认为:$HOME/.pm2/logs/XXXerr.log),pm2 install pm2-logrotate进行日志文件拆分
    error_file: './error.log',
    // 输出文件路径 (默认为:$HOME/.pm2/logs/XXXout.log)
    out_file: './out.log',
    // 如果设置为true,则避免在日志文件后面添加进程id
    combine_logs: true,
    // combine_logs的别名,集群情况下,可以合并日志
    merge_logs: true,
    // 进程id文件路径 (默认为:$HOME/.pm2/pid/app-pm_id.pid)
    pid_file: './app-pm_id.pid',

    // 最小正常运行时间
    min_uptime: 3000,
    // 超时重新加载(单位:毫秒)
    listen_timeout: 8000,
    //     超时发出SIGKILL信号,以供杀死进程
    kill_timeout: 1600,
    // 使用process.send(‘shutdown’)关闭应用程序,而不是process.kill(pid, SIGINT)
    shutdown_with_message: false,
    // 等待process.send(‘ready’),而不是重新加载等待监听事件
    wait_ready: false,
    // 最大重启次数
    max_restarts: 10,
    // 重启延迟时间
    restart_delay: 4000,
    //     自动重启
    autorestart: false,
    // 定时重启
    cron_restart: '1 0 * * *',
    //     如果为false, PM2启动时将不带viszion特性(版本控制元数据)
    vizion: false,
    // 从Keymetrics仪表板执行Pull/Upgrade操作后将执行的命令列表
    post_update: ['npm install', 'echo launching the app'],
    // 默认为false。如果为true,则可以多次启动相同的脚本
    force: true,
  }],

  // 部署脚本
  deploy : {
    // 生产环境
    production : {
      // SSH key 路径
      key: '$HOME/.ssh',
      // SSH 用户
      user: 'SSH_USERNAME',
      // SSH 主机
      host: 'SSH_HOSTMACHINE',
      // SSH 端口
      port: 22,
      // 没有命令行标志的SSH选项
      ssh_options: 'StrictHostKeyChecking=no',
      // git 远程/分支
      ref : 'origin/master',
      // git 地址
      repo: 'GIT_REPOSITORY',
      // 服务器文件路径
      path: 'DESTINATION_PATH',
      // 在本地机器上预先设置的命令或脚本路径
      pre-setup: '',
      // 在本地机器上安装后设置的命令或脚本路径
      post-setup: '',
      // 本地预部署
      pre-deploy: 'git fetch --all',
      // 后部署
      post-deploy : 'npm install && pm2 reload ecosystem.config.js --env production'
    }
  }
};

PM2 部署 Java 项目

初始化配置文件

pm2 init

修改配置文件

module.exports = {
  apps: [
    {
      name: 'java-demo',
      script: 'java',
      args: [
        "-jar",
        "demo.jar",
      ]
    }
  ]
}

部署并启动项目

pm2 start ecosystem.config.js

查看应用状态

pm2 show java-demo
最后修改:2023 年 11 月 02 日
温柔的好天气总是和我一样,帅的鸭皮!