web-dev-qa-db-fra.com

Arrêter un site web dotnet core en cours d'exécution sur kestrel

Lors du déploiement d'une nouvelle version d'un site Web principal .net existant. Comment puis-je d'abord en toute sécurité arrêter l'ancienne application Kestrel en cours d'exécution?

Voici un exemple de ce que j'aimerais écrire (Pseudo script de déploiement):

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

killall dotnet semble un peu dangereux. Comment cela fonctionnerait-il si j'hébergeais deux petits sites sur une même boîte?

10
Craigt

J'ai décidé d'utiliser un superviseur pour surveiller et gérer le processus. Voici un excellent article pour le configurer .

Il permet un contrôle simple sur des applications dotnet spécifiques comme celle-ci:

supervisorctl stop MyWebsiteName
supervisorctl start MyWebsiteName

Et il a un énorme avantage en ce qu'il peut essayer de redémarrer le processus s'il tombe, ou lorsque le système redémarre ... pour une raison quelconque.

8
Craigt

En conséquence de cette discussion , il n'y a aucun moyen sûr d'arrêter Kestrel maintenant. Vous devez trouver un PID par le nom de votre DLL et le tuer :

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

En cas d'arborescence de processus, vous devez manuellement grep tous les ID enfants et appeler kill pour chacun. Comme cela a été fait dans la méthode Microsoft.Extensions.Internal.ProcessExtensions.KillTree (lien correct de la discussion).

9
Ilya Chumakov