web-dev-qa-db-ja.com

kestrelで実行されている実行中のdotnetコアWebサイトを停止する

既存の.netコアWebサイトの新しいバージョンを展開する場合。最初に安全に実行中の古い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は少し危険なようです。 1つのボックスで2つの小さなサイトをホストしている場合、どのように機能しますか?

10
Craigt

スーパーバイザーを使用してプロセスを監視および管理することにしました。 設定方法に関する優れた記事

次のような特定のドットネットアプリを簡単に制御できます。

supervisorctl stop MyWebsiteName
supervisorctl start MyWebsiteName

そして、何らかの理由でプロセスが失敗した場合やシステムが再起動した場合にプロセスの再起動を試みることができるという大きな利点があります。

8
Craigt

この議論 に応じて、ケストレルを今すぐ停止する安全な方法はありません。 dllの名前と kill it でPIDを見つける必要があります。

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

プロセスツリーの場合、すべての子IDを手動でgrepし、それぞれに対してkillを呼び出す必要があります。 Microsoft.Extensions.Internal.ProcessExtensions.KillTree メソッドで行われたように(議論からの正しいリンク)。

9
Ilya Chumakov