![在 ubuntu 14 上将 .net core 作为 systemd 服务运行](https://linux22.com/image/1525254/%E5%9C%A8%20ubuntu%2014%20%E4%B8%8A%E5%B0%86%20.net%20core%20%E4%BD%9C%E4%B8%BA%20systemd%20%E6%9C%8D%E5%8A%A1%E8%BF%90%E8%A1%8C.png)
这很好,
webadmin@sandbox:/www/web/prod/prereg.example.org/prereg-sample$ dotnet restore
Restoring packages for /www/web/prod/prereg.example.org/prereg-sample/WebApplication/WebApplication.csproj...
Restoring packages for /www/web/prod/prereg.example.org/prereg-sample/WebApplication/WebApplication.csproj...
Restore completed in 558.64 ms for /www/web/prod/prereg.example.org/prereg-sample/WebApplication/WebApplication.csproj.
Lock file has not changed. Skipping lock file write. Path: /www/web/prod/prereg.example.org/prereg-sample/WebApplication/obj/project.assets.json
Restore completed in 2.12 sec for /www/web/prod/prereg.example.org/prereg-sample/WebApplication/WebApplication.csproj.
NuGet Config files used:
/home/webadmin/.nuget/NuGet/NuGet.Config
Feeds used:
https://api.nuget.org/v3/index.json
webadmin@sandbox:/www/web/prod/prereg.example.org/prereg-sample$ dotnet publish
Microsoft (R) Build Engine version 15.1.548.43366
Copyright (C) Microsoft Corporation. All rights reserved.
WebApplication -> /www/web/prod/prereg.example.org/prereg-sample/WebApplication/bin/Debug/netcoreapp1.1/WebApplication.dll
webadmin@sandbox:/www/web/prod/prereg.example.org/prereg-sample$ cd WebApplication/
webadmin@sandbox:/www/web/prod/prereg.example.org/prereg-sample/WebApplication$ dotnet run
Hosting environment: Production
Content root path: /www/web/prod/prereg.example.org/prereg-sample/WebApplication
Now listening on: http://sandbox.example.lab:5000
Application started. Press Ctrl+C to shut down.
结果如下
[sandbox]/etc/systemd/system> ps aux |grep dotnet
webadmin 29736 1.2 0.5 3286936 48576 pts/4 SLl+ 13:19 0:00 dotnet run
webadmin 29775 1.5 0.5 21251244 42736 pts/4 SLl+ 13:19 0:00 dotnet exec /www/web/prod/prereg.example.org/prereg-sample/WebApplication/bin/Debug/netcoreapp1.1/WebApplication.dll
但是当我将其添加到 systemd 时,意味着我尝试使其表现为 Linux 服务,例如自动启动。
使用以下配置
[Unit]
Description=prereg application
[Service]
WorkingDirectory=/www/web/prod/prereg.example.org/prereg-sample/WebApplication/bin/Debug/netcoreapp1.1/
ExecStart=/usr/bin/dotnet /www/web/prod/prereg.example.org/prereg-sample/WebApplication/bin/Debug/netcoreapp1.1/WebApplication.dll
Restart=always
RestartSec=10 # Restart service after 10 seconds if dotnet service crashes
SyslogIdentifier=prereg-sample
User=webadmin
Environment=ASPNETCORE_ENVIRONMENT=Production
[Install]
WantedBy=multi-user.target
我收到这个错误,你知道为什么会发生这种情况吗?
[sandbox]/etc/systemd/system> systemctl start prereg-sample
[sandbox]/etc/systemd/system> systemctl status prereg-sample
prereg-sample.service - prereg application
Loaded: loaded (/etc/systemd/system/prereg-sample.service; enabled)
Active: failed (Result: start-limit) since Sat 2017-03-18 13:24:23 +04; 8s ago
Process: 30080 ExecStart=/usr/bin/dotnet /www/web/prod/prereg.example.org/prereg-sample/WebApplication/bin/Debug/netcoreapp1.1/WebApplication.dll (code=killed, signal=ABRT)
[sandbox]/etc/systemd/system> journalctl -fu prereg-sample
-- Logs begin at Fri 2017-03-17 11:56:37 +04. --
Mar 18 13:24:23 sandbox.example.lab prereg-sample[30064]: at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProvider provider)
Mar 18 13:24:23 sandbox.example.lab prereg-sample[30064]: at Microsoft.Extensions.DependencyInjection.ServiceProvider.<>c__DisplayClass16_0.<RealizeService>b__0(ServiceProvider provider)
Mar 18 13:24:23 sandbox.example.lab prereg-sample[30064]: at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
Mar 18 13:24:23 sandbox.example.lab prereg-sample[30064]: at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
Mar 18 13:24:23 sandbox.example.lab prereg-sample[30064]: at Microsoft.AspNetCore.Hosting.Internal.WebHost.EnsureStartup()
Mar 18 13:24:23 sandbox.example.lab prereg-sample[30080]: Unhandled Exception: System.IO.FileNotFoundException: The configuration file 'appsettings.json' was not found and is not optional. The physical path is '/www/web/prod/prereg.example.o...ppsettings.json'.
Mar 18 13:24:23 sandbox.example.lab prereg-sample[30080]: at Microsoft.Extensions.Configuration.FileConfigurationProvider.Load(Boolean reload)
Mar 18 13:24:23 sandbox.example.lab prereg-sample[30080]: at Microsoft.Extensions.Configuration.ConfigurationRoot..ctor(IList`1 providers)
Mar 18 13:24:23 sandbox.example.lab prereg-sample[30080]: at Microsoft.Extensions.Configuration.ConfigurationBuilder.Build()
Mar 18 13:24:23 sandbox.example.lab prereg-sample[30080]: at WebApplication.Startup..ctor(IHostingEnvironment env) in /www/web/prod/prereg.example.org/prereg-sample/WebApplication/Startup.cs:line 23
答案1
我太傻了,
The configuration file 'appsettings.json' was not found and is not optional.
意味着文件夹设置不正确,应该是 /publish,appsettings.json 就在那里。并且它起作用了。开发人员没有添加包含 MongoDb 连接字符串的配置文件。