在 redhat 7 systemd 中运行 dotnet appname.dll 时如何调试 203/EXEC?



已经尝试调试 4 天了。 我有一个 asp.net 核心 2 Web 应用程序,我正在尝试在 Redhat linux 7.1 systemd 中运行。当我手动运行它时,dll 工作正常,但在尝试通过 systemd 运行时失败。

系统CTL的输出

web.service - webServiceLayer 已加载:已加载(/etc/systemd/user/web.service;已启用;供应商预设:>禁用)

活动:激活(自动重启)(结果:退出代码),自周日 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/执行)

4 月 28 日 12:49:01 mymachine.net systemd[1]:web.service:主进程已退出,代码=退出,状态=203/EXEC

4 月 28 日 12:49:01 mymachine.net systemd[1]:单元 web.service 进入失败状态。

Apr 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/service用户现在正在侦听:"http://0.0.0.0:7777"应用程序已启动。按 Ctrl+C 关闭。

我已经查看了修复systemd服务203/EXEC故障(没有此类文件或目录),但这对我的问题没有帮助。 任何帮助将不胜感激。

来自程序的代码.cs.dll文件中:

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://learn.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-2.2

之后,您可以在main方法中的代码周围进行大量尝试/捕获并记录异常。

我想到的唯一快速检查是,服务用户是否有足够的权限访问dll或配置文件或任何相关内容?

最新更新