diff --git a/Duplicati/Server/Program.cs b/Duplicati/Server/Program.cs index 23aa44986..0fab6a666 100644 --- a/Duplicati/Server/Program.cs +++ b/Duplicati/Server/Program.cs @@ -251,6 +251,7 @@ namespace Duplicati.Server ConfigureLogging(commandlineOptions); var crashed = false; + var terminated = false; try { DataConnection = GetDatabaseConnection(commandlineOptions); @@ -306,7 +307,23 @@ namespace Duplicati.Server Console.WriteLine(Strings.Program.ServerStartedSignin(url)); } + DuplicatiWebserver.TerminationTask.ContinueWith((t) => + { + if (t.Exception != null) + System.Diagnostics.Trace.WriteLine("Webserver terminated with exception: " + t.Exception); + + terminated = true; + ApplicationExitEvent.Set(); + }); ServerStartedEvent.Set(); + + Console.WriteLine($"Server is now running on port {DuplicatiWebserver.Port}"); + if (FIXMEGlobal.Origin == "Server" && DataConnection.ApplicationSettings.AutogeneratedPassphrase) + { + var signinToken = DuplicatiWebserver.Provider.GetRequiredService().CreateSigninToken("server-cli"); + Console.WriteLine($"Initial signin url: http://localhost:{DuplicatiWebserver.Port}/signin.html?token={signinToken}"); + } + ApplicationExitEvent.WaitOne(); } catch (SingleInstance.MultipleInstanceException mex) @@ -355,7 +372,7 @@ namespace Duplicati.Server { // If the server is already crashed, that is the main error // If the server crashes during teardown, we log that as an error - if (!crashed) + if (!(crashed || terminated)) { System.Diagnostics.Trace.WriteLine(Strings.Program.TearDownError(ex.ToString())); if (writeToConsole) diff --git a/Duplicati/WebserverCore/DuplicatiWebserver.cs b/Duplicati/WebserverCore/DuplicatiWebserver.cs index db48dbe99..df40453bd 100644 --- a/Duplicati/WebserverCore/DuplicatiWebserver.cs +++ b/Duplicati/WebserverCore/DuplicatiWebserver.cs @@ -24,6 +24,8 @@ public partial class DuplicatiWebserver public int Port { get; private set; } + public Task TerminationTask { get; private set; } = Task.CompletedTask; + /// /// The settings used for stating the server /// @@ -200,7 +202,7 @@ public partial class DuplicatiWebserver App.AddEndpoints() .UseNotifications("/notifications"); - return App.RunAsync(); + return TerminationTask = App.RunAsync(); } public async Task Stop()