У меня проблемы с запуском приложения 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)
, но это выходит за рамки.
Я предполагаю, что служба настроена неправильно, но почему она иногда работает, а иногда нет? .. Заранее спасибо.