Приложение Dotnetcore зависает на IWebHostBuilder.Build () под linux - PullRequest
0 голосов
/ 24 апреля 2020

У меня проблемы с запуском приложения dotnetcore в качестве службы под Ubuntu 18.04.3 LTS. Приложение работает нормально на Windows, и в большинстве случаев на Ubuntu тоже. Но несколько хостов в Ubuntu могут запустить сервис, но веб-хост не будет инициализироваться в течение нескольких часов, а затем внезапно инициализироваться без каких-либо внешних действий, см. Пример ниже. Journalctl не покажет ничего интересного перед внезапным запуском.

Apr 23 18:52:01 DSK06511.avp.ru MyNode.Api[12276]: Running MyNode as console app
Apr 24 13:42:04 DSK06511.avp.ru MyNode.Api[12276]: IWebHost is built

Служба запускается нормально, статус «работает»

root@DSK06511:/home/monouser# service MyNode status
● MyNode.service - MyNode
   Loaded: loaded (/etc/systemd/system/MyNode.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2020-04-24 18:36:31 MSK; 5min ago
 Main PID: 10131 (MyNode)
    Tasks: 14 (limit: 4915)
   CGroup: /system.slice/MyNode.service
           ├─10131 /home/monouser/.octopus/Applications/OctopusServer/Production/MyNode.Linux/4.0.1.907/MyNode --console
           ├─10220 /home/monouser/.octopus/Applications/OctopusServer/Production/MyNode.Linux/4.0.1.907/MyNode --console
           ├─10264 /home/monouser/.octopus/Applications/OctopusServer/Production/MyNode.Linux/4.0.1.907/MyNode --console
           └─10285 /home/monouser/.octopus/Applications/OctopusServer/Production/MyNode.Linux/4.0.1.907/MyNode --console

Apr 24 18:36:31 DSK06511.avp.ru systemd[1]: Started MyNode.
Apr 24 18:36:31 DSK06511.avp.ru MyNode[10131]: Running MmNode as console app
Apr 24 18:36:31 DSK06511.avp.ru MyNode[10131]: Building host...

Содержание Program.cs ниже:

public static async Task Main(string[] args)
{
    var isService = !Debugger.IsAttached && !args.Contains(ConsoleRunOption);
    Console.WriteLine("Running as " + (isService ? "service" : "console app"));
    IWebHostBuilder builder = null;
    try
    {
        builder = CreateWebHostBuilder(args.Where(p => p != ConsoleRunOption).ToArray());
    }
    catch (Exception e)
    {
        // logging here details...
        Environment.Exit(-1);
    }

    if (isService)
    {
        builder.UseContentRoot(Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName));
        var host = builder.Build();
        using ServiceBase service = new ProgramHostService(host);
        ServiceBase.Run(service);
        Console.WriteLine("After ServiceBase.Run");
    }
    else
    {
        Console.WriteLine("Building host...");   //this is the last line written to console
        var host = builder.Build();              //hangs here
        Console.WriteLine("IWebHost is built");  //may finish in hours
        var initializer = host.Services.GetRequiredService<Initializer>();
        Console.WriteLine("Running InitializeAsync...");
        await initializer.InitializeAsync();
        Console.WriteLine("Running IWebHost...");
        host.Run();
    }
}

Мой служебный файл запускается как .../MyNode --console (см. Полный текст ниже):

root@DSK06511:/home/monouser# cat  /etc/systemd/system/MyNode.service
[Unit]
Description=MyNode

[Service]
Type=simple

User=root
Group=root

ExecStart=/home/monouser/.octopus/Applications/OctopusServer/Production/MyNode.Linux/4.0.1.907/MyNode --console

[Install]
WantedBy=multi-user.target

К сожалению, выполнение do tnet -dump также не будет работать с ошибкой Writing dump failed (HRESULT: 0x80004005), но это выходит за рамки.

Я предполагаю, что служба настроена неправильно, но почему она иногда работает, а иногда нет? .. Заранее спасибо.

...