返回介绍

优雅的启动/关闭 Start/Shutdown

发布于 2024-04-14 00:45:03 字数 2179 浏览 0 评论 0 收藏 0

PM2 中如何处理信号

优雅的停止

为了允许正常重启/重新加载/停止进程,请确保在让应用程序退出之前拦截 SIGINT 信号并清除所需的一切(如数据库连接、处理作业...)。

process.on('SIGINT', function() {
   db.stop(function(err) {
     process.exit(err ? 1 : 0)
   })
})

现在 pm2 reload 将变成 gracefulReload。

配置终止超时

有时您可能需要等待您的应用程序与您的数据库/缓存/工作者/任何东西建立连接。 PM2 在将您的应用程序视为“在线”之前需要等待。 为此,您需要向 CLI 提供 --wait-ready 或在进程文件中提供 wait_ready: true 。 这将使 PM2 监听该事件。 在您的应用程序中,您需要添加 process.send('ready'); 当您希望您的应用程序被视为准备就绪时。

var http = require('http')

var app = http.createServer(function(req, res) {
  res.writeHead(200)
  res.end('hey')
})

var listener = app.listen(0, function() {
  console.log('Listening on port ' + listener.address().port)
  // 这里我们发送就绪信号给 PM2
  process.send('ready')
})

然后启动应用程序:

pm2 start app.js --wait-ready

配置就绪超时

当一个进程被 PM2 停止/重启时,一些系统信号会按给定的顺序发送到您的进程。

首先,一个 SIGINT 信号被发送到您的进程,您可以捕获该信号以了解您的进程将被停止。 如果您的应用程序在 1.6s ( customizable ) 之前没有自行退出,它将收到一个 SIGKILL 信号强制进程退出。

信号 SIGINT 可以通过设置环境变量 PM2_KILL_SIGNAL 替换为任何其他信号(例如 SIGTERM)。

Windows 优雅停止

当信号不可用时,您的进程将被终止。 在这种情况下,您必须通过 CLI 使用 --shutdown-with-message 或在生态系统文件中使用 shutdown_with_message 并监听 shutdown 事件。

Via CLI:

pm2 start app.js --shutdown-with-message

通过 申请声明 使用 shutdown_with_message 属性:

module.exports = {
  apps : [{
    name: 'app',
    script: './app.js',
    shutdown_with_message: true
  }]
}

监听 shutdown 事件

process.on('message', function(msg) {
  if (msg == 'shutdown') {
    console.log('Closing all connections...')
    setTimeout(function() {
      console.log('Finished closing connections')
      process.exit(0)
    }, 1500)
  }
})

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文