У меня проблема с задержкой.
Запуск моего веб-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();
@IgorCova Я мог бы добавить его, но, поскольку он работает при запуске из терминала, я не думаю, что есть какие-то проблемы. Я не хочу загромождать этот вопрос кодом.
Ладно :) Еще бы посоветовал запускать приложение .net Core в контейнере Docker. Это очень удобно и гибко
Трассировка стека указывает на FileSystemWatcher, который используется для отслеживания изменений файлов конфигурации. Я столкнулся с этой проблемой в приложении ASP.NET Core 5, работающем в контейнере Docker. Автор Dockerfile ошибся и опубликовал приложение прямо в корне контейнера.
После нескольких часов отладки и пробы разных вещей я в итоге изменил определение своего сервиса:
[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».
Кстати, у меня нет возможности комментировать, поэтому вместо этого я публикую ответ.
Пожалуйста, добавьте код, как выглядит метод
CreateWebHostBuilder