PM2 API

pm2也可以以编程方式使用,这意味着您可以直接在代码中嵌入流程管理器,产生流程,即使退出主脚本也能保持它们持续运行。

简单范例

这个例子展示了如何用一些配置属性来启动app.js。 传递给初始的元素与您可以在生态系统文件中声明的元素相同:

  1. npm install pm2 --save
  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: 'app.js',
  9. }, (err, apps) => {
  10. pm2.disconnect()
  11. if (err) { throw err }
  12. })
  13. })

如果您的脚本不能自行退出,请确保您调用 pm2.disconnect()

程序化API

pm2.connect(errback)pm2.connect(noDaemonMode, errback)

  • noDaemonMode - (默认值:false)如果第一个参数传递为true,那么pm2将不会作为守护进程运行,并在相关脚本退出时停止运行。 如果pm2已经在运行,您的脚本将链接到现有的守护进程,但一旦您的进程退出就会停止运行。
  • errback(error) - 在完成连接或启动pm2守护程序进程时调用。
    要么连接到正在运行的pm2守护进程(“God”),要么启动并守护进程。 一旦启动,pm2进程将在脚本退出后继续运行。

pm2.disconnect()

断开与pm2守护进程的连接。

pm2.killDaemon(errback)

终止pm2守护进程(与pm2 kill相同)。 请注意,当守护进程被终止时,其所有进程也被终止。 另外请注意,即使终止守护进程,您仍然须明确断开它。

pm2.start(options, errback)**pm2.start(jsonConfigFile, errback)pm2.start(script, errback)pm2.start(script, options, errback)**pm2.start(script, jsonConfigFile, errback)

  • script - 要运行的脚本路径。
  • jsonConfigFile - JSON文件的路径,它可以包含与options参数相同的选项。
  • errback(err,proc) - 当 script启动时调用errback。proc参数将是一个 pm2 进程对象
  • options - 具有以下选项的一个对象(这些选项的附加说明在此处):
    pm2.stop(process, errback)**pm2.restart(process, errback)pm2.delete(process, errback)pm2.reload(process, errback)**

  • process - 既可以是 pm2.startoptions中给出的name,也可以是进程ID,或者是字符串“all”,以表示应该重启所有脚本。

  • errback(err, proc)
    pm2.list(errback)

  • errback(err,processDescriptionList) - processDescriptionList参数将包含pm2.describe中定义的processDescription对象列表。
    pm2.describe(process,errback)

  • errback(err, processDescription)

  • processDescription - 包含有关过程信息的一个对象。 这包含以下属性:

    • name - 原始start命令中给出的名称。
    • pid - 过程中的pid.
    • pm_id - pm2God守护进程的pid
    • monit - 一个包含以下内容的对象:
      • memory - 进程正在使用的字节数。
      • cpu - 此时进程正在使用的CPU百分比。
    • pm2_env - 进程环境中的路径变量列表。 这些变量包括:
      • pm_cwd - 进程的工作目录。
      • pm_out_log_path - 标准输出流日志文件路径。
      • pm_err_log_path - 标准错误流日志文件路径。
      • exec_interpreter - 使用的解释器。
      • pm_uptime - 该进程的正常运行时间。
      • unstable_restarts - 该进程经历的不稳定的重启次数。
      • restart_time
      • status - “在线”,“正在停止”,“已停止”,“启动”,“错误”或“一次启动状态”
      • instances - 运行实例的数量。
      • pm_exec_path - 脚本在此进程中运行的路径。
        pm2.dump(errback)
  • errback(err, result)
    pm2.startup(platform, errback)

  • errback(err, result)
    pm2.flush(process, errback)

  • errback(err, result)
    pm2.reloadLogs(errback) - Rotates 日志文件。 新的日志文件将包含更高的数字(默认格式为 ${process.name}-${out|err}-${number}.log)。

  • errback(err, result)
    pm2.launchBus(errback) - 打开一个消息总线。

  • errback(err, bus) - 此bus将是一个用于收听和发送事件的Axon子发射对象。
    pm2.sendSignalToProcessName(signal, process, errback)

  • errback(err, result)

发送消息给进程

  1. // pm2-call.js:
  2. pm2.connect(() => {
  3. pm2.sendDataToProcessId({
  4. type: 'process:msg',
  5. data: {
  6. some: 'data',
  7. hello: true
  8. },
  9. id: 0,
  10. topic: 'some topic'
  11. }, (err, res) => {
  12. })
  13. })
  14. pm2.launchBus((err, bus) => {
  15. pm2_bus.on('process:msg', (packet) => {
  16. packet.data.success.should.eql(true)
  17. packet.process.pm_id.should.eql(proc1.pm2_env.pm_id)
  18. done()
  19. })
  20. })
  1. // pm2-app.js:
  2. process.on('message', (packet) => {
  3. process.send({
  4. type: 'process:msg',
  5. data: {
  6. success: true
  7. }
  8. })
  9. })

原文: https://pm2.io/doc/zh/runtime/reference/pm2-programmatic/