Comments 26
Зачем в ExecStart дублируется путь? Разве после указания WorkingDirectory нельзя было написать просто /usr/bin/dotnet ./test-lesson.dll
?
User=root
— вот так точно делать не стоит. Особенно так не стоит делать для программ, к которым кто-то кроме рута имеет доступ на запись. Надо включить в инструкцию создание отдельного пользователя для демона.
И последнее.
Здесь мы включаем поддержку ForwardedHeaders мидлвера из пакета. Microsoft.AspNetCore.HttpOverrides, который будет вставлять в Http-запрос заголовки X-Forwarded-For и X-Forwarded-Proto, использующиеся для определения исходного IP адреса клиента и передачи его прокси-серверу.
Вы перепутали, этот "мидлвер" не вставляет в запрос заголовки, а наоборот — читает их из запроса.
А какая в нем необходимость? Все равно сервер приложений .net core (какой бы он ни был) прятать за каким-нибудь nginx.
Это же не CGI, рожденный чтобы умереть или заранее запущенный процесс интерпретатора. Заморачивался ранее таким же вопросом, даже находил полуживой проект (кажись для моно). Но в основном все забили.
Насколько знаю (и использую в своих проектах), можно спокойно вытащить настоящий Ip — Request.HttpContext.Connection.RemoteIpAddress либо из заголовка X-Real-IP, даже если kestrel прячется за прокси.
В своих проектах используем supervisor, чтобы «демонизировать» asp.net core.
В итоге выходит как-то так: есть n-контейнеров с asp.net core приложениями, у которых внутри supervisor и само приложение, есть контейнер с nginx, который слушает все входящие запросы на 80 и 443 порты, а потом просто прокидывает в нужный контейнер, ну и всякие контейнеры с базами и прочим.
Из приятного в таком подходе — можем держать зоопарк приложений с разными версиями dotnet core всего лишь создав несколько образов
Приходится вручную убивать — но это же не гуд, или это обычное дело для MS?
"Лишние" — это какие именно? Интересуют их имена и переданные им параметры (можно подглядеть в /proc/${pid}/cmdline
).
И остается такое:
Все в одну строку, разметка Хабра иначе режет, нету скролинга (
/proc/31190/cmdline
/usr/share/dotnet/dotnet./usr/share/dotnet/sdk/2.2.401/MSBuild.dll.
/usr/share/dotnet/sdk/2.2.401/MSBuild.dll./nologo./nodemode:1./nodeReuse:true.
root 20 0 3797M 88712 55496 S 0.0 1.1 0:01.39 ├─ /usr/share/dotnet/dotnet /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /nologo /nodemode:1 /nodeReuse:true
root 20 0 3797M 88712 55496 S 0.0 1.1 0:00.00 │ ├─ /usr/share/dotnet/dotnet /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /nologo /nodemode:1 /nodeReuse:true
root 20 0 3797M 88712 55496 S 0.0 1.1 0:00.00 │ ├─ /usr/share/dotnet/dotnet /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /nologo /nodemode:1 /nodeReuse:true
root 20 0 3797M 88712 55496 S 0.0 1.1 0:00.00 │ ├─ /usr/share/dotnet/dotnet /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /nologo /nodemode:1 /nodeReuse:true
root 20 0 3797M 88712 55496 S 0.0 1.1 0:00.00 │ ├─ /usr/share/dotnet/dotnet /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /nologo /nodemode:1 /nodeReuse:true
root 20 0 3797M 88712 55496 S 0.0 1.1 0:00.26 │ ├─ /usr/share/dotnet/dotnet /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /nologo /nodemode:1 /nodeReuse:true
root 20 0 3797M 88712 55496 S 0.0 1.1 0:00.25 │ ├─ /usr/share/dotnet/dotnet /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /nologo /nodemode:1 /nodeReuse:true
root 20 0 3797M 88712 55496 S 0.0 1.1 0:00.00 │ ├─ /usr/share/dotnet/dotnet /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /nologo /nodemode:1 /nodeReuse:true
root 20 0 3797M 88712 55496 S 0.0 1.1 0:00.36 │ ├─ /usr/share/dotnet/dotnet /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /nologo /nodemode:1 /nodeReuse:true
root 20 0 3797M 88712 55496 S 0.0 1.1 0:00.00 │ ├─ /usr/share/dotnet/dotnet /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /nologo /nodemode:1 /nodeReuse:true
root 20 0 3797M 88712 55496 S 0.0 1.1 0:00.00 │ ├─ /usr/share/dotnet/dotnet /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /nologo /nodemode:1 /nodeReuse:true
root 20 0 3797M 88712 55496 S 0.0 1.1 0:00.00 │ ├─ /usr/share/dotnet/dotnet /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /nologo /nodemode:1 /nodeReuse:true
root 20 0 3797M 88712 55496 S 0.0 1.1 0:00.00 │ ├─ /usr/share/dotnet/dotnet /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /nologo /nodemode:1 /nodeReuse:true
root 20 0 3797M 88712 55496 S 0.0 1.1 0:00.00 │ ├─ /usr/share/dotnet/dotnet /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /nologo /nodemode:1 /nodeReuse:true
root 20 0 3797M 88712 55496 S 0.0 1.1 0:00.00 │ ├─ /usr/share/dotnet/dotnet /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /nologo /nodemode:1 /nodeReuse:true
root 20 0 3797M 88712 55496 S 0.0 1.1 0:00.00 │ ├─ /usr/share/dotnet/dotnet /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /nologo /nodemode:1 /nodeReuse:true
root 20 0 3797M 88712 55496 S 0.0 1.1 0:00.00 │ ├─ /usr/share/dotnet/dotnet /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /nologo /nodemode:1 /nodeReuse:true
root 20 0 3797M 88712 55496 S 0.0 1.1 0:00.00 │ └─ /usr/share/dotnet/dotnet /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /nologo /nodemode:1 /nodeReuse:true
root 20 0 3525M 83644 53828 S 0.0 1.1 0:01.16 ├─ /usr/share/dotnet/dotnet /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /nologo /nodemode:1 /nodeReuse:true
root 20 0 3525M 83644 53828 S 0.0 1.1 0:00.00 │ ├─ /usr/share/dotnet/dotnet /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /nologo /nodemode:1 /nodeReuse:true
root 20 0 3525M 83644 53828 S 0.0 1.1 0:00.00 │ ├─ /usr/share/dotnet/dotnet /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /nologo /nodemode:1 /nodeReuse:true
root 20 0 20.6G 252M 51764 S 0.0 3.3 0:05.31 │ ├─ /usr/share/dotnet/dotnet exec /usr/share/dotnet/sdk/2.2.401/Roslyn/bincore/VBCSCompiler.dll -pipename:xgicJLh614PpucyV4Nn9s_uL0EDEHYOnMe1l7fuQkb8
root 20 0 20.6G 252M 51764 S 0.0 3.3 0:00.00 │ │ ├─ /usr/share/dotnet/dotnet exec /usr/share/dotnet/sdk/2.2.401/Roslyn/bincore/VBCSCompiler.dll -pipename:xgicJLh614PpucyV4Nn9s_uL0EDEHYOnMe1l7fuQkb8
root 20 0 20.6G 252M 51764 S 0.0 3.3 0:00.00 │ │ ├─ /usr/share/dotnet/dotnet exec /usr/share/dotnet/sdk/2.2.401/Roslyn/bincore/VBCSCompiler.dll -pipename:xgicJLh614PpucyV4Nn9s_uL0EDEHYOnMe1l7fuQkb8
root 20 0 20.6G 252M 51764 S 0.0 3.3 0:00.00 │ │ ├─ /usr/share/dotnet/dotnet exec /usr/share/dotnet/sdk/2.2.401/Roslyn/bincore/VBCSCompiler.dll -pipename:xgicJLh614PpucyV4Nn9s_uL0EDEHYOnMe1l7fuQkb8
root 20 0 20.6G 252M 51764 S 0.0 3.3 0:00.00 │ │ ├─ /usr/share/dotnet/dotnet exec /usr/share/dotnet/sdk/2.2.401/Roslyn/bincore/VBCSCompiler.dll -pipename:xgicJLh614PpucyV4Nn9s_uL0EDEHYOnMe1l7fuQkb8
root 20 0 20.6G 252M 51764 S 0.0 3.3 0:00.00 │ │ ├─ /usr/share/dotnet/dotnet exec /usr/share/dotnet/sdk/2.2.401/Roslyn/bincore/VBCSCompiler.dll -pipename:xgicJLh614PpucyV4Nn9s_uL0EDEHYOnMe1l7fuQkb8
root 20 0 20.6G 252M 51764 S 0.0 3.3 0:00.00 │ │ ├─ /usr/share/dotnet/dotnet exec /usr/share/dotnet/sdk/2.2.401/Roslyn/bincore/VBCSCompiler.dll -pipename:xgicJLh614PpucyV4Nn9s_uL0EDEHYOnMe1l7fuQkb8
root 20 0 20.6G 252M 51764 S 0.0 3.3 0:00.00 │ │ ├─ /usr/share/dotnet/dotnet exec /usr/share/dotnet/sdk/2.2.401/Roslyn/bincore/VBCSCompiler.dll -pipename:xgicJLh614PpucyV4Nn9s_uL0EDEHYOnMe1l7fuQkb8
root 20 0 20.6G 252M 51764 S 0.0 3.3 0:00.00 │ │ ├─ /usr/share/dotnet/dotnet exec /usr/share/dotnet/sdk/2.2.401/Roslyn/bincore/VBCSCompiler.dll -pipename:xgicJLh614PpucyV4Nn9s_uL0EDEHYOnMe1l7fuQkb8
root 20 0 20.6G 252M 51764 S 0.0 3.3 0:00.01 │ │ ├─ /usr/share/dotnet/dotnet exec /usr/share/dotnet/sdk/2.2.401/Roslyn/bincore/VBCSCompiler.dll -pipename:xgicJLh614PpucyV4Nn9s_uL0EDEHYOnMe1l7fuQkb8
root 20 0 20.6G 252M 51764 S 0.0 3.3 0:00.36 │ │ ├─ /usr/share/dotnet/dotnet exec /usr/share/dotnet/sdk/2.2.401/Roslyn/bincore/VBCSCompiler.dll -pipename:xgicJLh614PpucyV4Nn9s_uL0EDEHYOnMe1l7fuQkb8
root 20 0 20.6G 252M 51764 S 0.0 3.3 0:00.32 │ │ ├─ /usr/share/dotnet/dotnet exec /usr/share/dotnet/sdk/2.2.401/Roslyn/bincore/VBCSCompiler.dll -pipename:xgicJLh614PpucyV4Nn9s_uL0EDEHYOnMe1l7fuQkb8
root 20 0 20.6G 252M 51764 S 0.0 3.3 0:00.28 │ │ ├─ /usr/share/dotnet/dotnet exec /usr/share/dotnet/sdk/2.2.401/Roslyn/bincore/VBCSCompiler.dll -pipename:xgicJLh614PpucyV4Nn9s_uL0EDEHYOnMe1l7fuQkb8
root 20 0 20.6G 252M 51764 S 0.0 3.3 0:00.30 │ │ ├─ /usr/share/dotnet/dotnet exec /usr/share/dotnet/sdk/2.2.401/Roslyn/bincore/VBCSCompiler.dll -pipename:xgicJLh614PpucyV4Nn9s_uL0EDEHYOnMe1l7fuQkb8
root 20 0 20.6G 252M 51764 S 0.0 3.3 0:00.00 │ │ ├─ /usr/share/dotnet/dotnet exec /usr/share/dotnet/sdk/2.2.401/Roslyn/bincore/VBCSCompiler.dll -pipename:xgicJLh614PpucyV4Nn9s_uL0EDEHYOnMe1l7fuQkb8
root 20 0 20.6G 252M 51764 S 0.0 3.3 0:00.00 │ │ ├─ /usr/share/dotnet/dotnet exec /usr/share/dotnet/sdk/2.2.401/Roslyn/bincore/VBCSCompiler.dll -pipename:xgicJLh614PpucyV4Nn9s_uL0EDEHYOnMe1l7fuQkb8
root 20 0 20.6G 252M 51764 S 0.0 3.3 0:00.00 │ │ ├─ /usr/share/dotnet/dotnet exec /usr/share/dotnet/sdk/2.2.401/Roslyn/bincore/VBCSCompiler.dll -pipename:xgicJLh614PpucyV4Nn9s_uL0EDEHYOnMe1l7fuQkb8
root 20 0 20.6G 252M 51764 S 0.0 3.3 0:00.00 │ │ ├─ /usr/share/dotnet/dotnet exec /usr/share/dotnet/sdk/2.2.401/Roslyn/bincore/VBCSCompiler.dll -pipename:xgicJLh614PpucyV4Nn9s_uL0EDEHYOnMe1l7fuQkb8
root 20 0 20.6G 252M 51764 S 0.0 3.3 0:00.00 │ │ └─ /usr/share/dotnet/dotnet exec /usr/share/dotnet/sdk/2.2.401/Roslyn/bincore/VBCSCompiler.dll -pipename:xgicJLh614PpucyV4Nn9s_uL0EDEHYOnMe1l7fuQkb8
root 20 0 3525M 83644 53828 S 0.0 1.1 0:00.67 │ ├─ /usr/share/dotnet/dotnet /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /nologo /nodemode:1 /nodeReuse:true
root 20 0 3525M 83644 53828 S 0.0 1.1 0:00.00 │ ├─ /usr/share/dotnet/dotnet /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /nologo /nodemode:1 /nodeReuse:true
root 20 0 3525M 83644 53828 S 0.0 1.1 0:00.00 │ ├─ /usr/share/dotnet/dotnet /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /nologo /nodemode:1 /nodeReuse:true
root 20 0 3525M 83644 53828 S 0.0 1.1 0:00.00 │ ├─ /usr/share/dotnet/dotnet /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /nologo /nodemode:1 /nodeReuse:true
root 20 0 3525M 83644 53828 S 0.0 1.1 0:00.00 │ ├─ /usr/share/dotnet/dotnet /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /nologo /nodemode:1 /nodeReuse:true
root 20 0 3525M 83644 53828 S 0.0 1.1 0:00.00 │ ├─ /usr/share/dotnet/dotnet /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /nologo /nodemode:1 /nodeReuse:true
root 20 0 3525M 83644 53828 S 0.0 1.1 0:00.00 │ ├─ /usr/share/dotnet/dotnet /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /nologo /nodemode:1 /nodeReuse:true
root 20 0 3525M 83644 53828 S 0.0 1.1 0:00.00 │ ├─ /usr/share/dotnet/dotnet /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /nologo /nodemode:1 /nodeReuse:true
root 20 0 3525M 83644 53828 S 0.0 1.1 0:00.00 │ ├─ /usr/share/dotnet/dotnet /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /nologo /nodemode:1 /nodeReuse:true
root 20 0 3525M 83644 53828 S 0.0 1.1 0:00.00 │ └─ /usr/share/dotnet/dotnet /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /nologo /nodemode:1 /nodeReuse:true
root 20 0 3861M 91876 55668 S 0.0 1.2 0:01.66 ├─ /usr/share/dotnet/dotnet /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /nologo /nodemode:1 /nodeReuse:true
root 20 0 3861M 91876 55668 S 0.0 1.2 0:00.00 │ ├─ /usr/share/dotnet/dotnet /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /nologo /nodemode:1 /nodeReuse:true
root 20 0 3861M 91876 55668 S 0.0 1.2 0:00.00 │ ├─ /usr/share/dotnet/dotnet /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /nologo /nodemode:1 /nodeReuse:true
root 20 0 3861M 91876 55668 S 0.0 1.2 0:00.57 │ ├─ /usr/share/dotnet/dotnet /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /nologo /nodemode:1 /nodeReuse:true
root 20 0 3861M 91876 55668 S 0.0 1.2 0:00.12 │ ├─ /usr/share/dotnet/dotnet /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /usr/share/dotnet/sdk/2.2.401/MSBuild.dll /nologo /nodemode:1 /nodeReuse:true
P.S. скрин не вставить, формат не схранить, как-то не очень (
Сами эти процессы не заканчиваются, очевидно, из-за ключа /nodeReuse:true
. Похоже, это фича такая, для ускорения повторных сборок.
Если они вам не нужны — вот так попробуйте: dotnet build /nodeReuse:false
. Если процессы останутся — то вот так: MSBUILDDISABLENODEREUSE=1 dotnet build
Ах да, судя по документации, дольше 60 секунд эти процессы в состоянии idle не проживут в любом случае; так что специально искать и убивать их точно не стоит.
А что по таким посоветуете:
/usr/share/dotnet/dotnet exec /usr/share/dotnet/sdk/2.2.401/Roslyn/bincore/VBCSCompiler.dll -pipename:xgicJLh614PpucyV4Nn9s_uL0EDEHYOnMe1l7fuQkb8
А это отключается через -p:UseSharedCompilation=false
(ну или UseSharedCompilation=0
)
Ещё есть UseRazorBuildServer
для Razor.
Ещё подсказывают команду dotnet build-server shutdown
.
MSBUILDDISABLENODEREUSE=1 UseSharedCompilation=0 dotnet restore
MSBUILDDISABLENODEREUSE=1 UseSharedCompilation=0 dotnet build /nodeReuse:false -p:UseSharedCompilation=false
Спасибо тебе добрый человек!
Жаль не могу карму повысить!
Вот дублировать переменную окружения в параметре точно не стоит.
А сам за минимализм, но как оказалось, минимальная рабочая конструкция такая…
/usr/share/dotnet/sdk/2.2.401/Roslyn/Microsoft.CSharp.Core.targets(126,10): error MSB4030: "0" is an invalid value for the "UseSharedCompilation" parameter of the "Csc" task. The "UseSharedCompilation" parameter is of type "System.Boolean". [/var/www/src-wemine/src/WeMine.Domain/WeMine.Domain.csproj]
Build FAILED.
/usr/share/dotnet/sdk/2.2.401/Roslyn/Microsoft.CSharp.Core.targets(126,10): error MSB4030: "0" is an invalid value for the "UseSharedCompilation" parameter of the "Csc" task. The "UseSharedCompilation" parameter is of type "System.Boolean". [/var/www/src-wemine/src/WeMine.Domain/WeMine.Domain.csproj]
0 Warning(s)
1 Error(s)
Например:
WorkingDirectory=/home/...publish # путь к publish папке вашего приложения
поменять на
# путь к publish папке вашего приложения
WorkingDirectory=/home/...publish
Дело в том, что в конфигах systemd нельзя делать комментарии в одной строке с кодом:
wiki.archlinux.org/index.php/systemd
Do not use end-line comments after systemd parameters or the unit will fail to activate.
Разворачиваем и демонизируем ASP.NET Core приложение под Linux в виде фонового сервиса