使用 PM2 进行部署而无需停机

ecosystem.json

{
    "name": "app-name",
    "script": "server",
    "exec_mode": "cluster",
    "instances": 0,    
    "wait_ready": true
    "listen_timeout": 10000,
    "kill_timeout": 5000,
}
wait_ready

而不是重新加载等待 listen 事件,等待 process.send(‘ready’);

listen_timeout

如果应用没有收听,则强制重新加载之前的时间以毫秒为单位。

kill_timeout

发送最终 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);
    });
});

你可能需要等待应用程序与你的 DB /缓存/工作者/任何人建立连接。在将你的应用程序视为在线之​​前,PM2 需要等待。为此,你需要在流程文件中提供 wait_ready: true。这将使 PM2 监听该事件。在你的应用程序中,当你希望将应用程序视为已准备好时,你需要添加 process.send('ready');

当 PM2 停止/重新启动进程时,某些系统信号将按给定顺序发送到你的进程。

首先,将一个信号发送到你的进程,发出信号,你可以知道你的进程将被停止。如果你的应用程序在 1.6s 之前没有自行退出(可自定义),它将收到 SIGKILL 信号以强制进程退出。因此,如果你的应用程序需要清理某些状态或作业,你可以捕获 SIGINT 信号以准备你的应用程序退出。