停止在 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 方法(讨论中的正确链接)。
【讨论】:
更新了问题链接terminatingdotnet 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 在生产中失败
HTTPS 不适用于在具有自定义域的 Service Fabric 上运行的 Kestrel 3.2.187/ASPNET Core 2.1.5