Pull to refresh

Comments 26

Зачем в ExecStart дублируется путь? Разве после указания WorkingDirectory нельзя было написать просто /usr/bin/dotnet ./test-lesson.dll?


User=root — вот так точно делать не стоит. Особенно так не стоит делать для программ, к которым кто-то кроме рута имеет доступ на запись. Надо включить в инструкцию создание отдельного пользователя для демона.


И последнее.


Здесь мы включаем поддержку ForwardedHeaders мидлвера из пакета. Microsoft.AspNetCore.HttpOverrides, который будет вставлять в Http-запрос заголовки X-Forwarded-For и X-Forwarded-Proto, использующиеся для определения исходного IP адреса клиента и передачи его прокси-серверу.

Вы перепутали, этот "мидлвер" не вставляет в запрос заголовки, а наоборот — читает их из запроса.

Кстати, если я ничего не путаю, то по умолчанию nginx эти заголовки не добавляет. Надо еще указать ему:


proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
В оригинальной инструкции от Майкрософта указывается пользователь www-data.
Когда вместо (вместе с) Kestrel будет уже какой-нибудь FastCGI сервер для .net core? Никто не знает, разрабатываются ли подобные проекты?

А какая в нем необходимость? Все равно сервер приложений .net core (какой бы он ни был) прятать за каким-нибудь nginx.

В том, что FastCGI общающийся с Nginx производительней, чем полноценный HTTP сервер, стоящий за тем же Nginx-ом.
А разве будет существовать хоть сколько нибудь значимая разница в производительности между легковесным (inapp?) веб сервером для компилируемых (даже в байт код) приложений?
Это же не CGI, рожденный чтобы умереть или заранее запущенный процесс интерпретатора. Заморачивался ранее таким же вопросом, даже находил полуживой проект (кажись для моно). Но в основном все забили.
Прекратите демонизировать ASP.NET Core!
Я бы посоветовал использовать supervisor для запуска dotnet?
UFO just landed and posted this here
«Я бы посоветовал использовать supervisor для запуска dotnet» без вопросительного знака в конце.
UFO just landed and posted this here
После использования Docker'а, подобные манипуляции вызывают противоречивые ощущения.
Не очень понимаю, зачем добавляем ForwardedHeaders:
Насколько знаю (и использую в своих проектах), можно спокойно вытащить настоящий Ip — Request.HttpContext.Connection.RemoteIpAddress либо из заголовка X-Real-IP, даже если kestrel прячется за прокси.

В своих проектах используем supervisor, чтобы «демонизировать» asp.net core.
В итоге выходит как-то так: есть n-контейнеров с asp.net core приложениями, у которых внутри supervisor и само приложение, есть контейнер с nginx, который слушает все входящие запросы на 80 и 443 порты, а потом просто прокидывает в нужный контейнер, ну и всякие контейнеры с базами и прочим.
Из приятного в таком подходе — можем держать зоопарк приложений с разными версиями dotnet core всего лишь создав несколько образов

Вот для того чтобы вы могли вытащить из Request.HttpContext.Connection.RemoteIpAddress настоящий IP клиента при использовании обратного прокси — и добавляют ForwardedHeaders.

Меня одно очень беспокоит, после билда dotnet проектов в памяти остаются всякие лишние процессы, почему они не заканчиваются, сами не терминатятся?
Приходится вручную убивать — но это же не гуд, или это обычное дело для MS?

"Лишние" — это какие именно? Интересуют их имена и переданные им параметры (можно подглядеть в /proc/${pid}/cmdline).

Билд прошел после команд dotnet restore && dotnet build.
И остается такое:

Все в одну строку, разметка Хабра иначе режет, нету скролинга (

/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.


вырзал с htop
 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 не проживут в любом случае; так что специально искать и убивать их точно не стоит.

Хм, это частично помогло (MSBUILDDISABLENODEREUSE=1), часть процесов красиво завершилось, но часть все же осталась.

А что по таким посоветуете:
/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.

Sign up to leave a comment.

Articles