【问题标题】:How to debug 203/EXEC when running dotnet appname.dll in redhat 7 systemd?在 redhat 7 systemd 中运行 dotnet appname.dll 时如何调试 203/EXEC?
【发布时间】:2019-09-17 11:32:32
【问题描述】:

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

systemctl 的输出

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

活动:自太阳 2019-04-28 >12:49:01 CDT 起激活(自动重启)(结果:退出代码); 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: 主进程退出,code=exited,status=203/EXEC

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

4 月 28 日 12:49:01 mymachine.net systemd[1]: web.service failed.

这是基本服务文件

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
    }

【问题讨论】:

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


    【解决方案1】:

    从输出中你很难知道发生了什么。我会建议你配置一些额外的日志记录。

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

    之后,您可以在 main 方法中的代码周围放置一个大的 try / catch 并记录异常。

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

    【讨论】:

    • 谢谢,所以我已经在实际代码中实现了 NLog。问题是执行甚至没有到达 Main 函数:
    • 看我最后的补充,serviceUser有足够的权限吗?您可以尝试使用 sudo 在该 serviceUser 下运行该进程,以查看它的行为方式。
    • 可以,serviceUser可以手动运行dll [serviceUser@mymachine]: /microsoft/dotnetcore/dotnet /local/lfs1/ServiceLayer/WebServiceLayer/WebServiceLayer.dll 宿主环境:Production 内容根路径:/home /serviceUser 现在正在监听:“0.0.0.0:7777”应用程序已启动。按 Ctrl+C 关闭。
    • 您是否检查了系统日志以获取有关该错误的更多详细信息?
    • 好的,所以我在 /var/logs/messages 文件中找到了这个:Apr 28 14:09:13 myMachine systemd: Failed at step EXEC spawning /microsoft/dotnetcore/dotnet /local/lfs1/ ServiceLayer/WebServiceLayer/WebServiceLayer.dll:没有这样的文件或目录。这没有意义,因为当我对这两个目录执行 ls 时,它们存在。
    猜你喜欢
    • 2018-12-09
    • 2015-09-24
    • 1970-01-01
    • 2020-03-21
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多