Search code examples
c#.net-coreraspberry-pi3asp.net-core-webapiraspbian

WebApi fails to start when run as service


I am having a weired problem.

Running my web-api like this works:

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

I've created this test-service.service in /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

Somehow I get this exception, I have no idea where it comes from:

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 - Line23: CreateWebHostBuilder(args).Build().Run();


Solution

  • After hours of debugging and trying different stuff I ended up changing my service definition:

    [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
    

    I've found this link which helped a lot.

    I don't know what happened here.