1.PM2 API
PM2 可以以编程方式使用,允许直接从代码管理进程。
2.快速开始
注意:要释放与 PM2 的连接并使您的应用程序自动退出,请确保与 pm2 断开连接pm2.disconnect()
首先添加 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) => {
// 与PM2断开连接
pm2.disconnect()
})
})
})
})
- 这将产生或连接到本地 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 | 将发送到目标进程的对象数据 |
目标进程将通过以下方式接收数据:
process.on('message', function(packet) {})
2.2.2.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
}
})
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:
const pm2 = require('pm2')
pm2.connect(function() {
pm2.sendDataToProcessId({
// 来自“pm2 list”命令或pm2.list(errback)方法的进程id
id : 1,
// process:msg will be send as 'message' on target process
type : 'process:msg',
// Data to be sent
data : {
some : 'data'
},
topic: true
}, function(err, res) {
})
})
// 侦听来自应用程序的消息
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
}
});
});