Node.js
Wdrażanie aplikacji Node.js bez przestojów.
Szukaj…
Wdrożenie przy użyciu PM2 bez przestojów.
ecosystem.json
{
"name": "app-name",
"script": "server",
"exec_mode": "cluster",
"instances": 0,
"wait_ready": true
"listen_timeout": 10000,
"kill_timeout": 5000,
}
wait_ready
Zamiast przeładowywać oczekiwanie na zdarzenie Listen, poczekaj na process.send ('ready');
listen_timeout
Czas w ms przed wymuszeniem przeładowania, jeśli aplikacja nie słucha.
kill_timeout
Czas w ms przed wysłaniem końcowego SIGKLL.
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);
});
});
Być może będziesz musiał poczekać, aż aplikacja nawiąże połączenie z twoimi bazami danych / pamięci podręcznej / pracownikami / czymkolwiek. PM2 musi poczekać, zanim uzna swoją aplikację za internetową. Aby to zrobić, musisz podać wait_ready: true
w pliku procesu. Spowoduje to, że PM2 nasłuchuje tego zdarzenia. W swojej aplikacji musisz dodać process.send('ready');
gdy chcesz, aby Twoje podanie zostało uznane za gotowe.
Gdy proces zostaje zatrzymany / zrestartowany przez PM2, niektóre sygnały systemowe są wysyłane do twojego procesu w określonej kolejności.
Najpierw SIGINT
wysyłany jest sygnał do procesów, sygnał, który można złapać, aby wiedzieć, że proces zostanie zatrzymany. Jeśli aplikacja nie zakończy się sama przed 1.6s (konfigurowalne), otrzyma sygnał SIGKILL
wymuszający wyjście z procesu. Jeśli więc aplikacja wymaga wyczyszczenia stanów lub zadań, możesz przechwycić sygnał SIGINT
, aby przygotować aplikację do wyjścia.