停止在 kestrel 上运行的 dotnet core 网站

Posted

技术标签:

【中文标题】停止在 kestrel 上运行的 dotnet core 网站【英文标题】:Stop a running dotnet core website running on kestrel 【发布时间】:2017-09-04 12:05:01 【问题描述】:

在部署现有 .net 核心网站的新版本时。如何首先安全地停止运行中的旧红隼应用?

这是我想写的一个例子(伪部署脚本):

dotnet stop mysite/mysite.dll <---- this line here
mv mysite/ mysite.bak/
cp newly-published-mysite/ mysite/
dotnet run mysite/mysite.dll

killall dotnet 似乎有点不安全。如果我在一个盒子上托管两个小网站,它会如何工作?

【问题讨论】:

【参考方案1】:

据this discussion 称,现在没有安全的方法来阻止 Kestrel。您需要通过您的 dll 名称和 kill it 找到一个 PID:

kill $(ps aux | grep 'MySite.dll' | awk 'print $2')

如果是进程树,您需要手动 grep 所有子 ID 并为每个子 ID 调用 kill。就像它是在 Microsoft.Extensions.Internal.ProcessExtensions.KillTree 方法(讨论中的正确链接)。

【讨论】:

更新了问题链接terminating dotnet run doesn't terminate child 正是我想要的开发脚本。我还发现它正在拾取 grep 管道进程并添加它以将其删除(在 awk 之前)。 | grep -v 'grep'【参考方案2】:

我决定使用主管来监控和管理流程。 Here is an excellent article on getting it set up.

它允许像这样简单地控制特定的 dotnet 应用程序:

supervisorctl stop MyWebsiteName
supervisorctl start MyWebsiteName

而且它有一个巨大的优势,它可以尝试在它崩溃时重新启动进程,或者当系统重新启动时......无论出于何种原因。

【讨论】:

以上是关于停止在 kestrel 上运行的 dotnet core 网站的主要内容,如果未能解决你的问题,请参考以下文章

使用appsettings.json配置Kestrel监听端口Dotnet core 2 preview 2

Dotnet 5 Kubernetes TLS 在生产中失败

dotnet中的counters说明

HTTPS 不适用于在具有自定义域的 Service Fabric 上运行的 Kestrel 3.2.187/ASPNET Core 2.1.5

无法在 macOS Monterey 上启动 Kestrel

Linux 容器上的 Kestrel 证书“没有这样的文件”适用于 Windows 容器