使用 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
信号以准备你的应用程序退出。