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
) 在stop
或restart
命令发出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
}
});
});