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

时间:2019-04-28 18:18:54

标签: c# asp.net-core redhat systemd systemctl

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

systemctl的输出

  

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

     

活动:从CDT 2019年4月28日> 12:49:01开始激活(自动重新启动)(结果:退出代码); 2秒前

     

进程:13588 ExecStart = / microsoft / dotnetcore / dotnet /local/lfs1/ServiceLayer/WebServiceLayer/WebServiceLayer.dll(代码=已退出,状态= 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
    }

1 个答案:

答案 0 :(得分:0)

从输出中可以清楚地知道发生了什么。我建议您配置一些额外的日志记录。

首先,您可以配置登录到文本文件以获取更多详细信息。更多信息:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-2.2

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

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