Deno和Docker如何监听SIGTERM信号并关闭服务器



我正试图找到一种方法,在Deno中监听Docker SIGTERM信号,以关闭我的Oak服务器。我从Oak网站上得到了这段代码,当我使用setTimeout或端点调用controller.abort()函数时,它工作得很好。然而,当我从Docker收到SIGTERM信号时,我想称之为,但我不知道如何收听

const controller = new AbortController();
const app = new Application();
app.addEventListener("listen", ({ hostname, port }) => {
console.log(
bold("Start listening on ") + yellow(`${hostname}:${port}`),
);
});
// Utilise the signal from the controller
const { signal } = controller;
await app.listen({ hostname: "127.0.0.1", port: 8000, signal });
console.log(bold("Finished."));

我尝试使用Deno GitHub讨论中的这段代码,但也没有使用

(() => {
for await (const _ of Deno.signal(Deno.Signal.SIGINT)) {
console.log("interrupt signal")
}
})()
(() => {
for await (const _ of Deno.signal(Deno.Signal.SIGQUIT)) {
console.log("quit signal")
}
})()
(() => {
for await (const _ of Deno.signal(Deno.Signal.SIGTERM)) {
console.log("terminate signal")
}
})()

我看不到任何日志,中止也不会被称为

您的方向是正确的,但您可以简化您的解决方案。

我的应用程序服务器处理程序示例。我正在使用Opine,但它可以通过粘贴到服务器初始化的任何位置进行调整。你也可以试着把它插入听众。

const handle = onSignal(Deno.Signal.SIGTERM, () => {
mongoConnector.close()
handle.dispose()
})

参考Signals Deno STD文件。

在调查同一件事时遇到了这个!使用addSignalListener添加侦听器有一个相对较新的不稳定特性。

Oak的一个工作示例:

import { Application } from "https://deno.land/x/oak/mod.ts";
const controller = new AbortController();
const app = new Application();
app.use(() => void console.log('hello!'));
app.listen({port: 8080, signal: controller.signal});
Deno.addSignalListener('SIGTERM', () => {
console.log('Aborting for SIGTERM')
controller.abort();
});
Deno.addSignalListener('SIGINT', () => {
console.log('Aborting for SIGINT')
controller.abort();
});

可与deno run --unstable --allow-net <file>.ts一起运行。

相关内容

  • 没有找到相关文章

最新更新