WebApi не запускается при запуске в качестве службы

У меня проблема с задержкой.

Запуск моего веб-API, как это работает:

$ /usr/local/bin/dotnet /usr/local/bin/dotnetcoreapps/api/TestService.dll

Я создал этот test-service.service в /etc/systemd/system/:

[Unit]
Description=DoorplateBackendService
After=network.target
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=always
RestartSec=1
User=pi
ExecStart=/usr/local/bin/dotnet /usr/local/bin/dotnetcoreapps/api/TestService.dll
KillSignal=SIGINT    

[Install]
WantedBy=network-online.target

Каким-то образом я получаю это исключение, я понятия не имею, откуда оно взялось:

System.IO.IOException: Invalid argument
at System.IO.Enumeration.FileSystemEnumerator`1.FindNextEntry()
at System.IO.Enumeration.FileSystemEnumerator`1.MoveNext()
at System.IO.FileSystemWatcher.RunningInstance.AddDirectoryWatchUnlocked(WatchedDirectory parent, String directoryName)
at System.IO.FileSystemWatcher.RunningInstance.AddDirectoryWatchUnlocked(WatchedDirectory parent, String directoryName)
at System.IO.FileSystemWatcher.RunningInstance.AddDirectoryWatchUnlocked(WatchedDirectory parent, String directoryName)
at System.IO.FileSystemWatcher.RunningInstance.AddDirectoryWatchUnlocked(WatchedDirectory parent, String directoryName)
at System.IO.FileSystemWatcher.RunningInstance.AddDirectoryWatchUnlocked(WatchedDirectory parent, String directoryName)
at System.IO.FileSystemWatcher.RunningInstance.AddDirectoryWatchUnlocked(WatchedDirectory parent, String directoryName)
at System.IO.FileSystemWatcher.RunningInstance..ctor(FileSystemWatcher watcher, SafeFileHandle inotifyHandle, String directoryPath, Boolean includeSubdirectories, NotifyFilters notifyFilters, CancellationToken cancellationToken)
at System.IO.FileSystemWatcher.StartRaisingEvents()
at System.IO.FileSystemWatcher.StartRaisingEventsIfNotDisposed()
at System.IO.FileSystemWatcher.set_EnableRaisingEvents(Boolean value)
at Microsoft.Extensions.FileProviders.Physical.PhysicalFilesWatcher.TryEnableFileSystemWatcher()
at Microsoft.Extensions.FileProviders.Physical.PhysicalFilesWatcher.CreateFileChangeToken(String filter)
at Microsoft.Extensions.FileProviders.PhysicalFileProvider.Watch(String filter)
at Microsoft.Extensions.Configuration.FileConfigurationProvider.<.ctor>b__0_0()
at Microsoft.Extensions.Primitives.ChangeToken.OnChange(Func`1 changeTokenProducer, Action changeTokenConsumer)
at Microsoft.Extensions.Configuration.FileConfigurationProvider..ctor(FileConfigurationSource source)
at Microsoft.Extensions.Configuration.Json.JsonConfigurationSource.Build(IConfigurationBuilder builder)
at Microsoft.Extensions.Configuration.ConfigurationBuilder.Build()
at Microsoft.AspNetCore.Hosting.WebHostBuilder.BuildCommonServices(AggregateException& hostingStartupErrors)
at Microsoft.AspNetCore.Hosting.WebHostBuilder.Build()
at BrodicatorService.Program.Main(String[] args) in <my_dir>\Program.cs:line 23;

Program.cs — Строка 23: CreateWebHostBuilder(args).Build().Run();

Пожалуйста, добавьте код, как выглядит метод CreateWebHostBuilder

Igor Cova 16.05.2019 12:20

@IgorCova Я мог бы добавить его, но, поскольку он работает при запуске из терминала, я не думаю, что есть какие-то проблемы. Я не хочу загромождать этот вопрос кодом.

Felix D. 16.05.2019 12:37

Ладно :) Еще бы посоветовал запускать приложение .net Core в контейнере Docker. Это очень удобно и гибко

Igor Cova 16.05.2019 12:41

Трассировка стека указывает на FileSystemWatcher, который используется для отслеживания изменений файлов конфигурации. Я столкнулся с этой проблемой в приложении ASP.NET Core 5, работающем в контейнере Docker. Автор Dockerfile ошибся и опубликовал приложение прямо в корне контейнера.

Palec 31.08.2021 00:47
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
468
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

После нескольких часов отладки и пробы разных вещей я в итоге изменил определение своего сервиса:

[Unit]
Description=MyTestService

[Service]
WorkingDirectory=/usr/local/bin/dotnetcoreapps/api
ExecStart=/usr/local/bin/dotnet /usr/local/bin/dotnetcoreapps/api/TestService.dll
Restart=always
RestartSec=10
KillSignal=SIGINT
User=root
Environment=ASPNETCORE_ENVIRONMENT=Production


[Install]
WantedBy=multi-user.target

Я нашел эта ссылка, который очень помог.

Я не знаю, что здесь произошло.

У меня была такая же проблема с моим проектом .NET 5, и я попытался поэкспериментировать с файлом «.service».

Решением для меня было изменить рабочий каталог на «/tmp». Я думаю, что это работает, потому что мое приложение находится на смонтированном сетевом диске (NFS).

Серверный проект MS Demo работал без рабочего каталога, установленного в «/tmp».

Кстати, у меня нет возможности комментировать, поэтому вместо этого я публикую ответ.

Другие вопросы по теме