Как заставить 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)
})