Как заставить pm2 перезапуститься через определенное время?

Я использую PM2 чтобы мои приложения node.js работали.

Есть ли способ иметь PM2 перезапускать мое приложение каждые 1 час?

4 ответа

Поместите код ниже в pm2.js и начните с pm2 start pm2.js

    var pm2 = require('pm2');

  pm2.connect(function(err) {
    if (err) throw err;

  setTimeout(function worker() {
    console.log("Restarting app...");
    pm2.restart('app', function() {});
    setTimeout(worker, 1000);
    }, 1000);
  });

Подробнее об этом можно узнать здесь.

Дополнительные ресурсы:

Используйте crontab.
Добавьте это в свой файл crontab (запустите сcrontab -e):

0 * * * * pm2 restart yourappname

Обратите внимание: если вы не хотите увеличивать счетчик перезапуска pm2, вы можете сделать что-то вроде этого:

0 * * * * pm2 stop yourappname && pm2 start yourappname

Пояснение:

0: на 0-й минуте часа
*: каждый час
*: каждый день
*: каждый месяц
*: Каждый день недели

Теперь вы можете использовать встроенный модуль pm2. --cron-restartвариант, описанный здесь . В вашем случае, чтобы перезагружаться каждый час, вы можете добавить это в свой конфигурационный файл pm2.

          cron_restart: '0 * * * *',

Вот как я это сделал. Потом:pm2 start name_of_your_file.js.

В моем случае он выйдет из скрипта через 15 минут.

/**************************************************************************
 * IMPORTS
 ***************************************************************************/

// NPM
const consola = require('consola')
const pm2 = require('pm2')

/**************************************************************************
 * START PM2 PROGRAMATICALLY
 ***************************************************************************/

pm2.connect((error) => {
  if (error) {
    console.error(error)
    process.exit(2)
  }

  pm2.start({ script: 'brain/domains.js' }, (error, apps) => {
    pm2.disconnect() // Disconnects from PM2

    if (error) {
      console.error(error)
      process.exit(2)
    }
  })

  // Kill the process if taking longer than expected
  setInterval(() => {
    pm2.describe('domains', (error, scripts) => {
      const exitTimeout = 15
      const uptime = Date.now() - scripts[0].pm2_env.pm_uptime

      if (uptime > exitTimeout * 60 * 1000) {
        consola.info(`Closing cluster after ${exitTimeout} minutes...`)

        pm2.restart('domains', (error) => {
          if (error) {
            console.error(error)
            process.exit(2)
          }
        })
      }
    })
  }, 30 * 1000)
})

Другие вопросы по тегам