1.PM2 API

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

2.快速开始

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

首先添加 PM2 作为依赖:

  1. npm install pm2 --save

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

  1. const pm2 = require('pm2')
  2. pm2.connect(function(err) {
  3. if (err) {
  4. console.error(err)
  5. process.exit(2)
  6. }
  7. pm2.start({
  8. script : 'api.js',
  9. name : 'api'
  10. }, function(err, apps) {
  11. if (err) {
  12. console.error(err)
  13. return pm2.disconnect()
  14. }
  15. pm2.list((err, list) => {
  16. console.log(err, list)
  17. pm2.restart('api', (err, proc) => {
  18. // 与PM2断开连接
  19. pm2.disconnect()
  20. })
  21. })
  22. })
  23. })
  • 这将产生或连接到本地 PM2
  • 然后用名称api启动 app.js
  • 显示所有使用 PM2 管理的应用程序
  • 然后重新启动名称为api的应用程序
  • 并断开与 PM2 的连接

2.1.API 方法

2.1.1.pm2.connect([no_daemon_mode], fn)

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

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

2.1.2.pm2.disconnect()

断开与本地 PM2 的连接

2.1.3.pm2.start(process, fn)

启动一个进程

参数 类型 描述
process string/object 脚本路径(相对)或对象通过选项
fn function 回调

2.1.4.pm2.stop(process, fn)

停止一个进程

参数 类型 描述
process string/number 目标进程ID或名称
fn function 回调

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

重启一个进程

参数 类型 描述
process string/number 目标进程ID或名称
[options] object 选项


(也可以添加updateEnv:true以强制更新) | | fn | function | 回调 |

2.1.6.pm2.reload(process, fn)

重新加载进程

参数 类型 描述
process string/number 目标进程ID或名称
fn function 回调

2.1.7.pm2.delete(process, fn)

删除一个进程

参数 类型 描述
process string/number 目标进程ID或名称
fn function 回调

2.1.8.pm2.killDaemon(fn)

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

2.1.9.pm2.describe(process, fn)

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

参数 类型 描述
process string/number 目标进程ID或名称
fn function 回调

2.1.10.pm2.list(fn)

检索所有用 PM2 管理的进程

2.2.高级方法

2.2.1.pm2.sendDataToProcessId(packet)

将数据发送到目标进程。

参数 类型 描述
packet.id number 目标进程ID
packet.type string 必须是 process:msg
packet.topic boolean 必须是 true
packet.data object 将发送到目标进程的对象数据

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

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

2.2.2.pm2.launchBus(fn)

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

  1. const pm2 = require('pm2')
  2. pm2.launchBus(function(err, pm2_bus) {
  3. pm2_bus.on('process:msg', function(packet) {
  4. console.log(packet)
  5. })
  6. })

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

  1. process.send({
  2. type : 'process:msg',
  3. data : {
  4. success : true
  5. }
  6. })

2.2.3.pm2.sendSignalToProcessName(signal, process, fn)

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

参数 类型 描述
signal string 系统信号名称
process string 目标进程名称
fn function Callback(err, process)
回调,第一个参数错误,第二个参数进程。

2.2.4.pm2.sendSignalToProcessId(signal, process, fn)

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

参数 类型 描述
signal string 系统信号名称
process number 目标进程ID
fn function Callback(err, process)
回调,第一个参数错误,第二个参数进程。

2.3.流程结构

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

  • processDescription :包含进程信息的对象数组。每个对象都包含以下属性:
    • name :原始启动命令中给出的名称。
    • pid :进程的 pid。
    • pm_id :为的PID PM2神守护进程。
    • 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 :“在线”、“正在停止”、“已停止”、“正在启动”、“出错”或“一次启动状态”
      • instances :正在运行的实例数。
      • pm_exec_path :在此进程中运行的脚本的路径。

2.4.例子

2.4.1.发送消息处理

pm2-call.js:

  1. const pm2 = require('pm2')
  2. pm2.connect(function() {
  3. pm2.sendDataToProcessId({
  4. // 来自“pm2 list”命令或pm2.list(errback)方法的进程id
  5. id : 1,
  6. // process:msg will be send as 'message' on target process
  7. type : 'process:msg',
  8. // Data to be sent
  9. data : {
  10. some : 'data'
  11. },
  12. topic: true
  13. }, function(err, res) {
  14. })
  15. })
  16. // 侦听来自应用程序的消息
  17. pm2.launchBus(function(err, pm2_bus) {
  18. pm2_bus.on('process:msg', function(packet) {
  19. console.log(packet)
  20. })
  21. })

pm2-app.js:

  1. process.on('message', function(packet) {
  2. process.send({
  3. type : 'process:msg',
  4. data : {
  5. success : true
  6. }
  7. });
  8. });