Как отлаживать 203 / EXEC при запуске dotnet appname.dll в redhat 7 systemd?

Пытался отладить уже 4 дня. У меня есть веб-приложение asp.net core 2, которое я пытаюсь запустить в Redhat linux 7.1 systemd. DLL работает нормально, когда я запускаю ее вручную, но не работает при попытке запустить через systemd.

Вывод из systemctl

web.service - WebServiceLayer Loaded: загружено (/etc/systemd/user/web.service; включено; предустановка поставщика:> отключено)

Активно: активация (автоматический перезапуск) (Результат: код выхода) с Sun 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)

28 апреля, 12:49:01 mymachine.net systemd [1]: web.service: основной процесс завершен, код = завершен, статус = 203 / EXEC

28 апреля, 12:49:01 mymachine.net systemd [1]: веб-служба модуля перешла в состояние ошибки.

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, чтобы выключить.

Я просмотрел Исправление службы systemd Ошибка 203 / EXEC (нет такого файла или каталога), но это не помогло моей проблеме. Любая помощь будет принята с благодарностью.

Код из Program.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
    }

person jangooni    schedule 28.04.2019    source источник


Ответы (1)


Судя по выходным данным, трудно понять, что происходит. Я бы посоветовал вам настроить дополнительное ведение журнала.

Сначала вы можете настроить ведение журнала в текстовый файл, чтобы получить более подробную информацию. Дополнительная информация: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-2.2.

После этого вы можете поместить большую попытку / уловить код в основном методе и зарегистрировать исключение.

Единственная быстрая проверка, которая приходит мне в голову, имеет ли serviceUser достаточно прав для доступа к файлам dll или config или любому другому подобному?

person Maarten Kieft    schedule 28.04.2019
comment
Спасибо, так что у меня уже есть NLog, реализованный в самом коде. Проблема в том, что выполнение даже не доходит до функции Main: - person jangooni; 28.04.2019
comment
Смотрите мое последнее дополнение, достаточно ли у serviceUser прав? И вы можете попробовать использовать sudo для запуска процесса под этим serviceUser, чтобы увидеть, как он себя ведет. - person Maarten Kieft; 28.04.2019
comment
Да, serviceUser может запустить dll вручную [serviceUser @ mymachine]: / microsoft / dotnetcore / dotnet /local/lfs1/ServiceLayer/WebServiceLayer/WebServiceLayer.dll Среда размещения: Рабочий путь к корневому каталогу контента: / home / serviceUser Теперь прослушивание: 0.0.0.0:7777 Приложение запущено. Нажмите Ctrl + C, чтобы выключить. - person jangooni; 28.04.2019
comment
Вы проверили системный журнал для получения дополнительных сведений об ошибке? - person Maarten Kieft; 28.04.2019
comment
Итак, я нашел это в файле / var / logs / messages: 28 апреля, 14:09:13 myMachine systemd: Ошибка на этапе создания EXEC / microsoft / dotnetcore / dotnet /local/lfs1/ServiceLayer/WebServiceLayer/WebServiceLayer.dll: Данный файл или каталог отсутствует. Что не имеет смысла, потому что, когда я выполняю ls в этих двух каталогах, они существуют. - person jangooni; 28.04.2019
comment
вы можете попытаться выяснить, какой из них вызывает проблему. bij делает просто dotnet без указания dll. если он работает, вы получите только некоторую справку, иначе та же ошибка - person Maarten Kieft; 28.04.2019
comment
Спасибо, завтра попробую. - person jangooni; 28.04.2019