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

Cra*_*igt 12 linux .net-core kestrel-http-server asp.net-core

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

以下是我想写的内容(伪部署脚本):

dotnet stop mysite/mysite.dll <---- this line here
mv mysite/ mysite.bak/
cp newly-published-mysite/ mysite/
dotnet run mysite/mysite.dll
Run Code Online (Sandbox Code Playgroud)

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

Ily*_*kov 10

根据这个讨论,现在没有安全的方法来阻止红隼.您需要通过dll的名称找到一个PID并将其杀死:

kill $(ps aux | grep 'MySite.dll' | awk '{print $2}')
Run Code Online (Sandbox Code Playgroud)

在进程树的情况下,您需要手动grep所有子ID并kill为每个子ID调用.就像在Microsoft.Extensions.Internal.ProcessExtensions.KillTree方法中完成的那样 (来自讨论的正确链接).

  • 正是我想要的开发脚本。我还发现它正在接收 grep 管道进程并添加它以将其删除(在 awk 之前)。`| grep -v 'grep'` (4认同)

Cra*_*igt 8

我决定使用主管来监控和管理流程.这是一篇关于设置它的优秀文章.

它允许简单控制特定的dotnet应用程序,如下所示:

supervisorctl stop MyWebsiteName
supervisorctl start MyWebsiteName
Run Code Online (Sandbox Code Playgroud)

它有一个巨大的优势,它可以尝试重新启动过程,如果它失败,或系统重新启动...无论出于何种原因.