文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
JSAPI PM2 JavaScript Api
在您的应用程序中交互或嵌入 PM2
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) => {
// 与 PM2 断开连接
pm2.disconnect()
})
})
})
})
- 这将生成或连接到本地 PM2
- 然后以名称 api 启动 app.js
- 显示所有使用 PM2 管理的应用程序
- 然后重新启动名称为 api 的应用程序
- 并断开与 PM2 的连接
API Methods
pm2.connect(no_daemon_mode, fn)
连接到本地 PM2 或生成一个新的 PM2 实例。
Param | Type | Default | Description |
---|---|---|---|
no_daemon_mode | boolean | false | 如果为真,它将运行一个独立的 PM2,最后自动退出 |
fn | function | Callback |
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
)在stop
或restart
命令发出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)
启动一个进程
参数 | 类型 | 说明 |
---|---|---|
process | string/object | 脚本路径(相对)或对象通过 options |
fn | function | Callback |
pm2.stop(process, fn)
停止进程
参数 | 类型 | 说明 |
---|---|---|
process | string/number | 目标进程 ID 或名称 |
fn | function | Callback |
pm2.restart(process, options, fn)
重启一个进程
参数 | 类型 | 说明 |
---|---|---|
process | string/number | 目标进程 ID 或名称 |
options | object | options (同时添加 updateEnv: true 以强制更新) |
fn | function | Callback |
pm2.reload(process, fn)
重新加载进程
参数 | 类型 | 说明 |
---|---|---|
process | string/number | 目标进程 ID 或名称 |
fn | function | Callback |
pm2.delete(process, fn)
删除进程
参数 | 类型 | 说明 |
---|---|---|
process | string/number | 目标进程 ID 或名称 |
fn | function | Callback |
pm2.killDaemon(fn)
杀死 pm2 守护进程(与 pm2 kill 相同)。
请注意,当守护进程被终止时,它的所有进程也会被终止。 另请注意,即使在终止守护进程后,您仍然必须明确断开与守护进程的连接。
pm2.describe(process, fn)
从目标进程获取所有元数据
参数 | 类型 | 说明 |
---|---|---|
process | string/number | 目标进程 ID 或名称 |
fn | function | Callback |
pm2.list(fn)
检索所有使用 PM2 管理的进程
Advanced Methods
pm2.sendDataToProcessId(packet)
将数据发送到目标进程。
参数 | 类型 | 说明 |
---|---|---|
packet.id | number | target process ID |
packet.type | string | must be process:msg |
packet.topic | boolean | must be true |
packet.data | object | 将发送到目标进程的对象数据 |
目标进程将通过以下方式接收数据:
js
process.on('message', function(packet) {})
pm2.launchBus(fn)
这允许从 PM2 管理的进程接收消息。
js
const pm2 = require('pm2')
pm2.launchBus(function(err, pm2_bus) {
pm2_bus.on('process:msg', function(packet) {
console.log(packet)
})
})
然后从一个由 PM2 管理的进程:
js
process.send({
type : 'process:msg',
data : {
success : true
}
})
pm2.sendSignalToProcessName(signal, process, fn)
将自定义系统信号发送到目标进程名称
参数 | 类型 | 说明 |
---|---|---|
signal | string | system signal name |
process | string | target process Name |
fn | function | Callback(err, process) |
pm2.sendSignalToProcessId(signal, process, fn)
将自定义系统信号发送到目标进程 ID
参数 | 类型 | 说明 |
---|---|---|
signal | string | system signal name |
process | number | target process id |
fn | function | Callback(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:
const pm2 = require('pm2')
pm2.connect(function() {
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'
}, 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
}
});
});
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论