在 kestrel 上停止 运行 dotnet 核心网站 运行

Stop a running dotnet core website running on kestrel

部署现有 .net 核心网站的新版本时。我如何首先安全地 停止旧的 运行 kestrel 应用程序?

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

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

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

根据this discussion, there is no safe way to stop Kestrel now. You need to find a PID by name of your dll and kill it:

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

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

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

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

supervisorctl stop MyWebsiteName
supervisorctl start MyWebsiteName

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