PM2 API PM2 API

在您的应用程序中交互或嵌入 PM2

PM2 API

PM2 可以以编程方式使用,允许直接从代码管理进程。

快速开始

注意:要释放与 PM2 的连接并使您的应用程序自动退出,请确保使用 pm2.disconnect() 断开与 pm2 的连接

首先添加 PM2 作为依赖:

bash
npm install pm2 --save

然后创建一个名为 app.js 和 pm2-control.js 的脚本,其中包含:

js
const pm2 = require('pm2')

pm2.connect((err) => {
  if (err) {
    console.error(err)
    process.exit(2)
  }

  pm2.start({
    script: 'api.js',
    name: 'api'
  }, (err, apps) => {
    if (err) {
      console.error(err)
      return pm2.disconnect()
    }

    pm2.list((err, list) => {
      console.log(err, list)

      pm2.restart('api', (err, proc) => {
        // 与 PM2 断开连接
        pm2.disconnect()
      })
    })
  })
})
  • 这将生成或连接到本地 PM2
  • 然后以名称 api 启动 app.js
  • 显示所有使用 PM2 管理的应用程序
  • 然后重新启动名称为 api 的应用程序
  • 并断开与 PM2 的连接

API Methods

pm2.connect(no_daemon_mode, fn)

连接到本地 PM2 或生成一个新的 PM2 实例。

ParamTypeDefaultDescription
no_daemon_modebooleanfalse如果为真,它将运行一个独立的 PM2,最后自动退出
fnfunctionCallback
  • noDaemonMode: 如果第一个参数为 true,pm2 将不会作为守护进程运行,并会在相关脚本退出时死亡。 默认情况下,pm2 在脚本退出后保持活动状态。 如果 pm2 已经在运行,你的脚本将链接到现有的守护进程,但一旦你的进程退出就会死掉。
  • script - 要运行的脚本的路径。
  • jsonConfigFile - 可以包含与“选项”参数相同的选项的 JSON 文件的路径。
  • errback(err,proc) - 启动 script 时调用的 errback。 proc 参数将是一个 pm2 进程对象
  • options - 具有以下选项的对象(这些选项的其他说明在此处):
    • name - 一个任意名称,可用于稍后在其他命令中与进程交互(例如重新启动)。 默认为不带扩展名的脚本名称(例如,“testScript.js”对应的“testScript”)。
    • script - 要运行的脚本的路径。
    • args - 由要传递给脚本的参数组成的字符串或字符串数组。
    • interpreterArgs - 由调用解释器进程的参数组成的字符串或字符串数组。 例如“--harmony”或“--harmony”,“--debug”。 仅当 interpreter 不是“none”(默认为“节点”)时才适用。
    • cwd - 启动进程的工作目录。
    • output - (默认值:"~/.pm2/logs/app_name-out.log")要将 stdout 输出附加到的文件的路径。 可以是与 error 相同的文件。
    • error - (默认值:"~/.pm2/logs/app_name-error.err")要将 stderr 输出附加到的文件的路径。 可以是与“输出”相同的文件。
    • logDateFormat - 日志时间戳的显示格式(例如“YYYY-MM-DD HH:mm Z”)。 格式为时刻显示格式
    • pid - (默认值:"~/.pm2/pids/app_name-id.pid")写入启动进程 pid 的文件路径。 文件将被覆盖。 请注意,pm2 不会以任何方式使用该文件,因此用户可以随时自由操作或删除该文件。 当进程停止或守护进程终止时,该文件将被删除。
    • minUptime - 脚本在被认为成功启动之前的最短正常运行时间。
    • maxRestarts - 如果脚本退出时间少于“minUptime”,脚本将连续重启的最大次数。
    • maxMemoryRestart - 如果设置并且 script 的内存使用量达到配置的数量,pm2 将重新启动 script。 使用人性化后缀:“K”代表千字节,“M”代表兆字节,“G”代表千兆字节等。例如“150M”。
    • killTimeout - (默认值:1600)在 stoprestart 命令发出 SIGINT 信号以使用 SIGKILL 信号强行终止脚本后等待的毫秒数。
    • restartDelay - (默认值:0)重新启动已退出的脚本之前等待的毫秒数。
    • interpreter - (默认值:'node')脚本的解释器(例如“python”、“ruby”、“bash”等)。 值“无”将作为二进制可执行文件执行“脚本”。
    • execMode - (默认值:'fork')如果设置为 'cluster',将启用集群(运行 script 的多个实例)。 有关详细信息,请参见此处
    • instances - (Default: 1) 要创建多少个 script 实例。 仅与“exec_mode”“集群”相关。
    • mergeLogs - (默认值:false)如果为 true,则将所有 script 实例的日志文件合并到一个 stderr 日志和一个 stdout 日志中。 仅适用于“集群”模式。 例如,如果您有 4 个通过 pm2 启动的“test.js”实例,通常您会有 4 个 stdout 日志文件和 4 个 stderr 日志文件,但是如果将此选项设置为 true,您将只有一个 stdout 文件和一个 stderr 文件 .
    • watch - 如果设置为“true”,应用程序将在“脚本”文件更改时重新启动。
    • force - (默认值:false)默认情况下,pm2 只会在脚本尚未运行时启动脚本(脚本是应用程序的路径,而不是已运行的应用程序的名称)。 如果 force 设置为 true,pm2 将启动该脚本的一个新实例。
    • autorestart - (默认true)。 如果为 false,pm2 将不会尝试在成功完成或进程失败后重新启动它。
    • cron
    • executeCommand
    • write
    • sourceMapSupport
    • disableSourceMapSupport

断开与本地 PM2 的连接

pm2.start(process, fn)

启动一个进程

参数类型说明
processstring/object脚本路径(相对)或对象通过 options
fnfunctionCallback

pm2.stop(process, fn)

停止进程

参数类型说明
processstring/number目标进程 ID 或名称
fnfunctionCallback

pm2.restart(process, options, fn)

重启一个进程

参数类型说明
processstring/number目标进程 ID 或名称
optionsobjectoptions(同时添加 updateEnv: true 以强制更新)
fnfunctionCallback

pm2.reload(process, fn)

重新加载进程

参数类型说明
processstring/number目标进程 ID 或名称
fnfunctionCallback

pm2.delete(process, fn)

删除进程

参数类型说明
processstring/number目标进程 ID 或名称
fnfunctionCallback

pm2.killDaemon(fn)

杀死 pm2 守护进程(与 pm2 kill 相同)。

请注意,当守护进程被终止时,它的所有进程也会被终止。 另请注意,即使在终止守护进程后,您仍然必须明确断开与守护进程的连接。

pm2.describe(process, fn)

从目标进程获取所有元数据

参数类型说明
processstring/number目标进程 ID 或名称
fnfunctionCallback

pm2.list(fn)

检索所有使用 PM2 管理的进程

Advanced Methods

pm2.sendDataToProcessId(packet)

将数据发送到目标进程。

参数类型说明
packet.idnumbertarget process ID
packet.typestringmust be process:msg
packet.topicbooleanmust be true
packet.dataobject将发送到目标进程的对象数据

目标进程将通过以下方式接收数据:

js
process.on('message', (packet) => {})

pm2.launchBus(fn)

这允许从 PM2 管理的进程接收消息。

js
const pm2 = require('pm2')

pm2.launchBus((err, pm2_bus) => {
  pm2_bus.on('process:msg', (packet) => {
    console.log(packet)
  })
})

然后从一个由 PM2 管理的进程:

js
process.send({
  type: 'process:msg',
  data: {
    success: true
  }
})

pm2.sendSignalToProcessName(signal, process, fn)

将自定义系统信号发送到目标进程名称

参数类型说明
signalstringsystem signal name
processstringtarget process Name
fnfunctionCallback(err, process)

pm2.sendSignalToProcessId(signal, process, fn)

将自定义系统信号发送到目标进程 ID

参数类型说明
signalstringsystem signal name
processnumbertarget process id
fnfunctionCallback(err, process)

Process structure

当调用上述任何方法时,都会返回一个变异的进程数组。 该对象包含:

  • processDescription - 包含有关进程信息的对象数组。 每个对象都包含以下属性:
    • name - 原始 start 命令中给出的名称。
    • pid - 进程的 pid。
    • pm_id - pm2 上帝守护进程的 pid。
    • monit - 包含以下内容的对象:
      • memory - 进程正在使用的字节数。
      • cpu - 进程当前使用的 CPU 百分比。
    • pm2_env - 进程环境中的路径变量列表。 这些变量包括:
      • pm_cwd - 进程的工作目录。
      • pm_out_log_path - 标准输出日志文件路径。
      • pm_err_log_path - stderr 日志文件路径。
      • exec_interpreter - 使用的解释器。
      • pm_uptime - 进程的正常运行时间。
      • unstable_restarts - 进程经历的不稳定重启次数。
      • restart_time
      • status - "online", "stopping", "stopped", "launching", "errored", or “one-launch-status”
      • instances - 正在运行的实例数。
      • pm_exec_path - 此进程中正在运行的脚本的路径。

Examples

Send message to process

pm2-call.js:

js
const pm2 = require('pm2')

pm2.connect(() => {
  pm2.sendDataToProcessId({
    // 来自“pm2 list”命令或来自 pm2.list(errback) 方法的进程 ID
    id: 1,

    // process:msg 将作为“消息”发送到目标进程
    type: 'process:msg',

    // 要发送的数据
    data: {
      some: 'data'
    },
    id: 0, // 来自“pm2 list”命令或来自 pm2.list(errback) 方法的进程 ID
    topic: 'some topic'
  }, (err, res) => {
  })
})

// 收听来自应用程序的消息
pm2.launchBus((err, pm2_bus) => {
  pm2_bus.on('process:msg', (packet) => {
    console.log(packet)
  })
})

pm2-app.js:

js
process.on('message', (packet) => {
  process.send({
    type: 'process:msg',
    data: {
      success: true
    }
  })
})