Node.js
Distribuzione dell'applicazione Node.js senza tempi di inattività.
Ricerca…
Distribuzione utilizzando PM2 senza tempi di fermo.
ecosystem.json
{
"name": "app-name",
"script": "server",
"exec_mode": "cluster",
"instances": 0,
"wait_ready": true
"listen_timeout": 10000,
"kill_timeout": 5000,
}
wait_ready
Invece di ricaricare in attesa dell'evento di ascolto, attendere process.send ('ready');
listen_timeout
Tempo in ms prima di forzare un ricaricamento se l'app non è in ascolto.
kill_timeout
Tempo in ms prima di inviare un SIGKLL finale.
server.js
const http = require('http');
const express = require('express');
const app = express();
const server = http.Server(app);
const port = 80;
server.listen(port, function() {
process.send('ready');
});
process.on('SIGINT', function() {
server.close(function() {
process.exit(0);
});
});
Potrebbe essere necessario attendere che l'applicazione abbia connessioni stabilite con i propri DB / cache / worker / qualunque. PM2 deve attendere prima di considerare l'applicazione come online. Per fare ciò, è necessario fornire wait_ready: true
in un file di processo. Questo renderà PM2 in ascolto per quell'evento. Nella tua applicazione dovrai aggiungere process.send('ready');
quando vuoi che la tua domanda sia considerata pronta.
Quando un processo viene arrestato / riavviato da PM2, alcuni segnali di sistema vengono inviati al processo in un determinato ordine.
Prima un SIGINT
viene inviato un segnale ai tuoi processi, segnale che puoi prendere per sapere che il tuo processo verrà fermato. Se la tua applicazione non esce prima di 1.6s (personalizzabile) riceverà un segnale SIGKILL
per forzare l'uscita del processo. Quindi se la tua applicazione ha bisogno di ripulire qualcosa di stato o di lavoro, puoi prendere il segnale SIGINT
per preparare la tua richiesta di uscita.