优雅的停止
为了允许优雅的重启/重新加载/停止进程,请确保在让应用程序退出之前拦截SIGINT信号并清除所需的一切(如数据库连接、处理作业……)。
https://pm2.keymetrics.io/docs/usage/signals-clean-restart/
process.on('SIGINT', function() {
db.stop(function(err) {
process.exit(err ? 1 : 0)
})
})
现在pm2 reload
会变成gracefulReload
。
配置终止超时
通过 CLI,这会将超时延长至 3000 毫秒:
pm2 start app.js --kill-timeout 3000
通过应用程序声明使用kill_timeout
属性:
module.exports = {
apps : [{
name: 'app',
script: './app.js',
kill_timeout : 3000
}]
}
优雅的开始
有时您可能需要等待您的应用程序与您的数据库/缓存/工作者/任何东西建立连接。PM2 在将您的应用程序视为 online
. 为此,您需要--wait-ready
向 CLI 提供或wait_ready: true
在流程文件中提供。这将使 PM2 监听该事件。在您的应用程序中,您需要添加process.send('ready');
何时您希望您的应用程序被视为准备就绪。
var http = require('http')
var app = http.createServer(function(req, res) {
res.writeHead(200)
res.end('hey')
})
var listener = app.listen(0, function() {
console.log('Listening on port ' + listener.address().port)
// Here we send the ready signal to PM2
process.send('ready')
})
然后启动应用程序:
pm2 start app.js --wait-ready
配置就绪超时
默认情况下,PM2 等待 3000ms 的ready信号。
通过 CLI,这会将超时延长至 10000 毫秒:
pm2 start app.js --wait-ready --listen-timeout 10000
通过应用程序声明使用listen_timeoutandwait_ready属性:
module.exports = {
apps : [{
name: 'app',
script: './app.js',
wait_ready: true,
listen_timeout: 10000
}]
}
优雅开始使用 http.Server.listen
仍然有挂钩http.Server.listen
方法的默认系统。当您的 http 服务器接受连接时,它会自动将您的应用程序声明为准备就绪。您可以使用与优雅启动相同的变量来增加 PM2 等待时间--wait-ready:listen_timeout
进程文件中的条目或--listen-timeout=XXXX
通过 CLI。
说明:信号流
当一个进程被 PM2 停止/重启时,一些系统信号会按给定的顺序发送到您的进程。
首先,一个SIGINT信号被发送到您的进程,您可以捕获该信号以了解您的进程将被停止。如果您的应用程序在 1.6 秒(可自定义)之前没有自行退出,它将收到SIGKILL信号以强制进程退出。
通过设置环境变量PM2_KILL_SIGNAL
,可以在任何其他信号(例如SIGTERM )上替换信号SIGINT。
Windows优雅停止
当信号不可用时,您的进程将被终止。在这种情况下,您必须--shutdown-with-message
通过 CLI 或shutdown_with_message
在生态系统文件中使用并监听shutdown事件。
通过 CLI:
pm2 start app.js --shutdown-with-message
通过应用程序声明使用shutdown_with_message
属性:
module.exports = {
apps : [{
name: 'app',
script: './app.js',
shutdown_with_message: true
}]
}
监听shutdown事件
process.on('message', function(msg) {
if (msg == 'shutdown') {
console.log('Closing all connections...')
setTimeout(function() {
console.log('Finished closing connections')
process.exit(0)
}, 1500)
}
})
最后编辑:Jeebiz 更新时间:2023-02-26 22:38