一直试图调试4天。我有一个asp.net core 2 web应用程序我正在尝试在Redhat linux 7.1 systemd中运行。当我手动运行它时,dll工作正常,但在尝试运行systemd时失败。
来自systemctl的输出
web.service - WebServiceLayer已加载:已加载(/etc/systemd/user/web.service;已启用;供应商预设:>已禁用)
活动:激活(自动重启)(结果:退出代码)自Sun 2019-04-28> 12:49:01 CDT; 2s前
进程:13588 ExecStart = / microsoft / dotnetcore / dotnet /local/lfs1/ServiceLayer/WebServiceLayer/WebServiceLayer.dll(code = exited,status = 203 / EXEC)
主PID:13588(代码=退出,状态= 203 / EXEC)
4月28日12:49:01 mymachine.net systemd [1]:web.service:主进程退出,代码=退出,状态= 203 / EXEC
4月28日12:49:01 mymachine.net systemd [1]:单位web.service进入失败状态。
4月28日12:49:01 mymachine.net systemd [1]:web.service失败。
这是基本的服务文件
mymachine home/username $ cat /etc/systemd/user/web.service
[Unit]
Description=WebServiceLayer
After=syslog.target
[Service]
User=serviceUser
Group=serviceUser
PIDFile=/tmp/$i.pid
WorkingDirectory=%h
Environment="PATH=/microsoft/dotnetcore/"
ExecStart="/microsoft/dotnetcore/dotnet /local/lfs1/ServiceLayer/WebServiceLayer/WebServiceLayer.dll"
Restart=always
RestartSec=3
StartLimitBurst=10
StartLimitIntervalSec=0
KillSignal=SIGQUIT
StandardError=syslog
NotifyAccess=all
[Install]
WantedBy=multi-user.target
作为参考,当我启动dll时,通常我没有错误:
[serviceUser @ mymachine]:/ microsoft / dotnetcore / dotnet /local/lfs1/ServiceLayer/WebServiceLayer/WebServiceLayer.dll托管环境:生产内容根路径:/ home / serviceUser现在收听:“http://0.0.0.0:7777”应用程序启动。按Ctrl + C关闭。
我看过Fixing a systemd service 203/EXEC failure (no such file or directory),但这对我的问题没有帮助。任何帮助将不胜感激。
来自.dll文件中Program.cs的代码:
public static void Main(string[] args)
{
// NLog: setup the logger first to catch all errors
var logger = NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();
try
{
logger.Debug("init main");
CreateWebHostBuilder(args).Build().Run();
}
catch (Exception ex)
{
//NLog: catch setup errors
logger.Error(ex, "Stopped program because of exception");
throw;
}
finally
{
// Ensure to flush and stop internal timers/threads before application-exit (Avoid segmentation fault on Linux)
NLog.LogManager.Shutdown();
}
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseUrls(urls: "http://mymachine.net:7777")
.UseStartup<Startup>()
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
})
.UseNLog(); // NLog: setup NLog for Dependency injection
}
从输出中你很难知道发生了什么。我建议你配置一些额外的日志记录。
首先,您可以配置日志记录到文本文件以获取更多详细信息。更多信息:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-2.2
之后,您可以在main方法中对代码进行大量尝试/捕获并记录异常。
在我看来,唯一的快速检查是serviceUser是否有足够的权限来访问dll或配置文件或任何相关的东西?