我有一个针对DotNet1.1.0的ASP.NET核心角度应用程序。
我在我的LinuxUbuntu16.04上安装了Nginx,并按照以下方式配置了nginx confog文件:
server {
listen 80;
location / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
和myapp.services文件如下:
[Unit]
Description=Sample application.
[Service]
Type=simple
WorkingDirectory=/var/myappfolder
ExecStart=/usr/bin/dotnet /var/myappfolder/myapp.dll
#User=web
[Install]
WantedBy=multi-user.target
我用一个简单的示例应用程序测试了这个设置,它运行得很好。但是,一旦我将正确的应用程序部署到/var/myapp文件夹并配置
systemclt start mywebsite
systemclt daemon_reload
然后检查
systemclt status mywebsite
我知道这个错误:
jtrade.service -示例应用程序。加载: loaded (/lib/systemd/system/jtrade.service;禁用;供应商预置:已启用) Active: failed (结果: signal),自Wed 2017-08-30 18:08:08 UTC;9s前进程: 4640 ExecStart=/usr/bin/dotnet /var/jtrade/jtradep.dll (code=killed,signal=ABRT)主PID: 4640 (code=killed,signal=ABRT) 8月30日18:08:08 :08本地主机Microsoft.DotNet.Configurer.NuGetCacheSentinel.get_NuGetCachePath() dotnet4640: at 8月30日18:08:08 :08本地主机Microsoft.DotNet.Configurer.NuGetCacheSentinel.Exists() dotnet4640: at 8月30日18:08:08 :08本地主机Microsoft.DotNet.Configurer.DotnetFirstTimeUseConfigurer.ShouldPrimeNugetCache() dotnet4640: at 8月30日18:08:08 :08本地主机Microsoft.DotNet.Configurer.DotnetFirstTimeUseConfigurer.Configure() dotnet4640: at 8月30日18:08:08 localhost dotnet4640: at dotnet4640 nugetCacheSentinel) 8月30日18:08:08本地主机Microsoft.DotNet.Cli.Program.ProcessArgs(String[] dotnet4640: at ITelemetry telemetryClient 8月30日18:08:08本地主机dotnet4640: at Microsoft.DotNet.Cli.Program.Main(String[] args) 8月30日18:08:08本地主机systemd1: jtrade.service:主进程退出,状态=6/ABRT 8月30日18:08:08本地主机systemd1: jtrade.service: Unit进入失败状态。 8月30日18:08:08 :08本地主机systemd1: jtrade.service: Failed和结果‘信号’。
因此,我深入研究了如何用journalctl -u myappname
调试这个错误,并获得了一些更有用的信息:
启动示例应用程序..。 8月31日05:13:34本地主机dotnet10290:未处理异常: System.InvalidOperationException: Required环境变量'HOME‘未设置。尝试设置“HOME”并再次运行操作。 8月31日05:13:34本地主机NuGet.Common.NuGetEnvironment.GetValueOrThrowMissingEnvVar(Func
1 getValue, String name) Aug 31 05:13:34 localhost dotnet[10290]: at NuGet.Common.NuGetEnvironment.GetHome() Aug 31 05:13:34 localhost dotnet[10290]: at NuGet.Common.NuGetEnvironment.<>c.<.cctor>b\_\_12\_0() Aug 31 05:13:34 localhost dotnet[10290]: at System.Lazy
1.CreateValue() dotnet10290: at 8月31日05:13:34 localhost dotnet10290:--从抛出异常的前一个位置开始的堆栈跟踪结束 8月31日05:13:34本地主机System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() dotnet10290: at 8月31日05:13:34本地主机dotnet10290: at System.Lazy`1.get_Value() 8月31日05:13:34本地主机dotnet10290: at dotnet10290文件夹) 8月31日05:13:34本地主机dotnet10290: at dotnet10290文件夹) 8月31日05:13:34本地主机dotnet10290: at dotnet10290设置) 8月31日05:13:34本地主机dotnet10290: at dotnet10290设置) 8月31日05:13:34本地主机Microsoft.DotNet.Configurer.NuGetCacheSentinel.get_NuGetCachePath() dotnet10290: at 8月31日05:13:34本地主机Microsoft.DotNet.Configurer.NuGetCacheSentinel.Exists() dotnet10290: at 8月31日05:13:34本地主机Microsoft.DotNet.Configurer.DotnetFirstTimeUseConfigurer.ShouldPrimeNugetCache() dotnet10290: at 8月31日05:13:34本地主机Microsoft.DotNet.Configurer.DotnetFirstTimeUseConfigurer.Configure() dotnet10290: at 8月31日05:13:34本地主机dotnet10290: at dotnet10290 nugetCacheSentinel) 8月31日05:13:34本地主机Microsoft.DotNet.Cli.Program.ProcessArgs(String[] dotnet10290: at ITelemetry telemetryClient) 8月31日05:13:34本地主机dotnet10290: at Microsoft.DotNet.Cli.Program.Main(String[] args) 8月31日05:13:34本地主机systemd1: jtrade.service:主进程退出,状态=6/ABRT 8月31日05:13:34本地主机systemd1: jtrade.service: Unit进入失败状态。 8月31日05:13:34本地主机systemd1: jtrade.service: Failed,其结果为“信号”。
在这里,如果我使用printenv来查看我的环境变量,我会发现HOME= /root
也许它应该被设置成别的什么?
发布于 2017-08-31 14:01:26
显然,我刚刚在.service文件中编写了Environment=HOME=/root,一切都开始工作了。
https://stackoverflow.com/questions/45967246
复制相似问题