重启策略

重启策略

使用 PM2 启动应用程序时,应用程序会在自动退出、事件循环为空(node.js)或应用程序崩溃时自动重启。但您也可以配置额外的重启策略,例如

  • 在指定的 CRON 时间重启应用程序
  • 文件更改时重启应用程序
  • 当应用程序达到内存阈值时重启
  • 延迟启动和自动重启
  • 禁用自动重启(默认情况下,应用程序在崩溃或退出时始终使用 PM2 重启)
  • 以特定的指数递增时间自动重启应用程序

按 cron 时间重启

通过 CLI

$ pm2 start app.js --cron-restart="0 0 * * *"
# Or when restarting an app
$ pm2 restart app --cron-restart="0 0 * * *"

通过配置文件,使用 cron_restart 属性

module.exports = {
  apps : [{
    name: 'Business News Watcher',
    script: 'app.js',
    instances: 1,
    cron_restart: '0 0 * * *',
    env: {
      NODE_ENV: 'development'
    },
    env_production: {
      NODE_ENV: 'production'
    }
  }]
}

禁用 cron 重启

pm2 restart app --cron-restart 0

文件更改时重启

当当前目录或其子目录中的文件被修改时,PM2 可以自动重启您的应用程序

通过 CLI

$ pm2 start app.js --watch

注意:如果应用程序是使用 --watch 选项启动的,则停止应用程序不会阻止它在文件更改时重启。要完全禁用监视功能,请执行以下操作:pm2 stop app --watch 或通过 pm2 restart app --watch 在应用程序重启时切换监视选项。

通过配置文件,使用 watch: true 属性

module.exports = {
  script: "app.js",
  watch: true
}

您可以使用以下选项指定要监视更改的文件夹、忽略的文件夹和监视文件的时间间隔

module.exports = {
  script: "app.js",
  // Specify which folder to watch
  watch: ["server", "client"],
  // Specify delay between watch interval
  watch_delay: 1000,
  // Specify which folder to ignore 
  ignore_watch : ["node_modules", "client/img"],
}

基于内存的重启策略

PM2 允许根据内存限制重新加载应用程序(如果不在集群中,则自动回退到重启)。请注意,PM2 内部工作程序(检查内存)每 30 秒启动一次,因此您可能需要等待一段时间,然后您的进程才会在达到内存阈值后自动重启。

CLI

$ pm2 start api.js --max-memory-restart 300M

通过配置文件,使用 max_memory_restart 属性

module.exports = {
  script: 'api.js',
  max_memory_restart: '300M'
}

注意:单位可以是 K(千字节)(例如 512K)、M(兆字节)(例如 128M)、G(千兆字节)(例如 1G)。

重启延迟

使用重启延迟策略设置自动重启之间的延迟

CLI

$ pm2 start app.js --restart-delay=3000

通过配置文件,使用 restart_delay 属性

module.exports = {
  script: 'app.js',
  restart_delay: 3000
}

不自动重启

如果我们希望运行一次性脚本并且不希望进程管理器在脚本运行完成后重启它,这将非常有用。

CLI

$ pm2 start app.js --no-autorestart

通过配置文件,使用 autorestart 属性

module.exports = {
  script: 'app.js',
  autorestart: false
}

跳过特定退出代码的自动重启

有时,您可能希望应用程序在出现故障(即非零退出代码)时自动重启,而当它正常关闭时(即退出代码等于 0)不希望进程管理器重启它。

在这种情况下,您仍然可以通过将 stop_exit_codes 选项设置为应跳过自动重启的退出代码来正常使用 PM2

CLI

$ pm2 start app.js --stop-exit-codes 0

或者,通过配置文件,使用 stop_exit_codes 属性

module.exports = [{
  script: 'app.js',
  stop_exit_codes: [0]
}]

指数退避重启延迟

PM2 运行时已实现一种新的重启模式,使您的应用程序重启更加智能。当发生异常时(例如数据库宕机),指数退避重启不会疯狂地重启您的应用程序,而是会逐渐增加重启之间的时间,从而减少数据库或外部提供程序的压力……非常易于使用

CLI

$ pm2 start app.js --exp-backoff-restart-delay=100

通过配置文件,使用 exp_backoff_restart_delay 属性

module.exports = {
  script: 'app.js',
  exp_backoff_restart_delay: 100
}

当应用程序意外崩溃并且 --exp-backoff-restart-delay 选项被激活时,您将能够看到一个新的应用程序状态:等待重启

通过运行 pm2 logs,您还将看到重启延迟正在增加

PM2      | App [throw:0] will restart in 100ms
PM2      | App [throw:0] exited with code [1] via signal [SIGINT]
PM2      | App [throw:0] will restart in 150ms
PM2      | App [throw:0] exited with code [1] via signal [SIGINT]
PM2      | App [throw:0] will restart in 225ms

如您所见,重启之间的重启延迟将以指数移动平均值增加,直到达到最大值 15000 毫秒。

当应用程序恢复到稳定模式(正常运行时间超过 30 秒,无需重启)时,重启延迟将自动重置为 0 毫秒。

为此页面做出贡献