API

pm2也可以以编程方式使用,意味着你可以直接在代码中管理进程,创建进程,即使主脚本退出也能保持它们持续运行。

简单范例

这个例子展示了如何用一些配置属性来启动app.js。 传入start方法的配置objectecosystem.config.js文件的配置相同:

npm install pm2 --save
const pm2 = require('pm2')

pm2.connect(function(err) {
  if (err) {
    console.error(err)
    process.exit(2)
  }

  pm2.start({
    script: 'app.js',
  }, (err, apps) => {
    pm2.disconnect()
    if (err) { throw err }
  })
})

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

编程式API

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

要么连接到正在运行的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)

pm2.stop(process, errback) pm2.restart(process, errback) pm2.delete(process, errback) pm2.reload(process, errback)

pm2.list(errback)

pm2.describe(process,errback)

pm2.dump(errback)

pm2.startup(platform, errback)

pm2.flush(process, errback)

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

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

pm2.sendSignalToProcessName(signal, process, errback)

发送消息给进程

// pm2-call.js:
pm2.connect(() => {
  pm2.sendDataToProcessId({
    type: 'process:msg',
    data: {
      some: 'data',
      hello: true
    },
    id: 0,
    topic: 'some topic'
  }, (err, res) => {
  })
})

pm2.launchBus((err, bus) => {
  pm2_bus.on('process:msg', (packet) => {
    packet.data.success.should.eql(true)
    packet.process.pm_id.should.eql(proc1.pm2_env.pm_id)
    done()
  })
})
// pm2-app.js:
process.on('message', (packet) => {
  process.send({
    type: 'process:msg',
    data: {
     success: true
    }
 })
})