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?
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.
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).