PM2 API

PM2 API

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

快速入门

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

首先将 PM2 添加为依赖项

npm install pm2 --save

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

const pm2 = require('pm2')

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

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

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

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

API 方法

pm2.connect([no_daemon_mode], fn)

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

参数 类型 默认值 描述
[no_daemon_mode] 布尔值 false 如果为 true,它将运行一个独立的 PM2,该 PM2 将在结束时自动退出
fn 函数   回调
  • noDaemonMode:如果第一个参数传递 true,则 pm2 将不会作为守护进程运行,并且将在相关脚本退出时终止。默认情况下,pm2 在脚本退出后保持活动状态。如果 pm2 已经在运行,则您的脚本将链接到现有的守护进程,但将在您的进程退出后终止。

  • script - 要运行的脚本的路径。
  • jsonConfigFile - JSON 文件的路径,该文件可以包含与 options 参数相同的选项。
  • errback(err,proc) - 在 script 启动时调用的错误回调。 proc 参数将是一个 pm2 进程对象
  • options - 具有以下选项的对象(这些选项的更多描述 在此处
    • name - 可以在以后的其他命令中用于与进程交互(例如重新启动)的任意名称。默认为不带扩展名的脚本名称(例如 "testScript.js""testScript")。
    • script - 要运行的脚本的路径。
    • args - 由要传递给脚本的参数组成的字符串或字符串数组。
    • interpreterArgs - 由用于调用解释器进程的参数组成的字符串或字符串数组。例如“--harmony”或 [“--harmony”,“--debug”]。仅在 interpreter 不是“none”(默认情况下为“node”)时适用。
    • cwd - 用于启动进程的工作目录。
    • output - (默认值: "~/.pm2/logs/app_name-out.log") 用于追加 stdout 输出的文件的路径。可以与 error 相同。
    • error - (默认值: "~/.pm2/logs/app_name-error.err") 用于追加 stderr 输出的文件的路径。可以与 output 相同。
    • logDateFormat - 日志时间戳的显示格式(例如“YYYY-MM-DD HH:mm Z”)。该格式是 moment 显示格式
    • 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”等)。值“none”将把“script”作为二进制可执行文件执行。
    • execMode - (默认值: 'fork') 如果设置为“cluster”,则将启用集群(运行 script 的多个实例)。有关更多详细信息,请参见此处
    • instances - (默认值: 1) 要创建的 script 实例数。仅在 exec_mode 为“cluster”时相关。
    • mergeLogs - (默认值: false) 如果为 true,则将 script 的所有实例的日志文件合并到一个 stderr 日志和一个 stdout 日志中。仅在“cluster”模式下适用。例如,如果您通过 pm2 启动了 4 个“test.js”实例,则通常您将拥有 4 个 stdout 日志文件和 4 个 stderr 日志文件,但是如果将此选项设置为 true,则您将只有一个 stdout 文件和一个 stderr 文件。
    • watch - 如果设置为 true,则应用程序将在 script 文件更改时重新启动。
    • force (默认值: false) 默认情况下,pm2 仅在脚本尚未运行时才启动脚本(脚本是应用程序的路径,而不是已运行的应用程序的名称)。如果 force 设置为 true,则 pm2 将启动该脚本的新实例。
    • autorestart (默认值 true)。如果为 false,则 pm2 将不会在成功完成或进程失败后尝试重新启动它。
    • cron
    • executeCommand
    • write
    • sourceMapSupport
    • disableSourceMapSupport

断开与本地 PM2 的连接

pm2.start(process, fn)

启动进程

参数 类型 描述
process 字符串/对象 脚本路径(相对路径)或通过 选项 传递的对象
fn 函数 回调

pm2.stop(process, fn)

停止进程

参数 类型 描述
process 字符串/数字 目标进程 ID 或名称
fn 函数 回调

pm2.restart(process, [options], fn)

重新启动进程

参数 类型 描述
process 字符串/数字 目标进程 ID 或名称
[options] 对象 选项(还添加 updateEnv: true 以强制更新)
fn 函数 回调

pm2.reload(process, fn)

重新加载进程

参数 类型 描述
process 字符串/数字 目标进程 ID 或名称
fn 函数 回调

pm2.delete(process, fn)

删除进程

参数 类型 描述
process 字符串/数字 目标进程 ID 或名称
fn 函数 回调

pm2.killDaemon(fn)

杀死 pm2 守护进程(与 pm2 kill 相同)。请注意,当守护进程被杀死时,其所有进程也会被杀死。另请注意,即使在杀死守护进程后,您仍然必须显式断开与守护进程的连接。

pm2.describe(process, fn)

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

参数 类型 描述
process 字符串/数字 目标进程 ID 或名称
fn 函数 回调

pm2.list(fn)

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

高级方法

pm2.sendDataToProcessId(packet)

向目标进程发送数据。

参数 类型 描述
packet.id 数字 目标进程 ID
packet.type 字符串 必须为 process:msg
packet.topic 布尔值 必须为 true
packet.data 对象 将发送到目标进程的对象数据

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

process.on('message', function(packet) {})

pm2.launchBus(fn)

这允许接收来自使用 PM2 管理的进程的消息。

const pm2 = require('pm2')

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

然后从使用 PM2 管理的进程

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

pm2.sendSignalToProcessName(signal, process, fn)

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

参数 类型 描述
signal 字符串 系统信号名称
process 字符串 目标进程名称
fn 函数 回调(错误,进程)

pm2.sendSignalToProcessId(signal, process, fn)

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

参数 类型 描述
signal 字符串 系统信号名称
process 数字 目标进程 ID
fn 函数 回调(错误,进程)

进程结构

调用上述任何方法时,将返回一个已修改的进程数组。此对象包含

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

示例

向进程发送消息

pm2-call.js

const pm2 = require('pm2')

pm2.connect(function() {
  pm2.sendDataToProcessId({
    // id of process from "pm2 list" command or from pm2.list(errback) method
    id   : 1,

    // process:msg will be send as 'message' on target process
    type : 'process:msg',

    // Data to be sent
    data : {
      some : 'data'
    },
    id   : 0, // id of process from "pm2 list" command or from pm2.list(errback) method
    topic: 'some topic'
  }, function(err, res) {
  })
})

// Listen to messages from application
pm2.launchBus(function(err, pm2_bus) {
  pm2_bus.on('process:msg', function(packet) {
    console.log(packet)
  })
})

pm2-app.js

process.on('message', function(packet) {
  process.send({
    type : 'process:msg',
    data : {
     success : true
    }
 });
});
为此页面做出贡献