diff --git a/src/NzbDrone.Common/Processes/ProcessProvider.cs b/src/NzbDrone.Common/Processes/ProcessProvider.cs index 785b029e5..cdb47174b 100644 --- a/src/NzbDrone.Common/Processes/ProcessProvider.cs +++ b/src/NzbDrone.Common/Processes/ProcessProvider.cs @@ -269,6 +269,7 @@ namespace NzbDrone.Common.Processes if (process.HasExited) { + Logger.Trace("Process has already exited"); return; } diff --git a/src/NzbDrone.Console/ConsoleApp.cs b/src/NzbDrone.Console/ConsoleApp.cs index 1cf0aae11..a88122209 100644 --- a/src/NzbDrone.Console/ConsoleApp.cs +++ b/src/NzbDrone.Console/ConsoleApp.cs @@ -25,6 +25,9 @@ namespace NzbDrone.Console Logger.FatalException("EPIC FAIL!", e); System.Console.WriteLine("Press any key to exit..."); System.Console.ReadLine(); + + //Need this to terminate on mono (thanks nlog) + LogManager.Configuration = null; } } } diff --git a/src/NzbDrone.Core/Jobs/Scheduler.cs b/src/NzbDrone.Core/Jobs/Scheduler.cs index e0d6e8194..6588d3de8 100644 --- a/src/NzbDrone.Core/Jobs/Scheduler.cs +++ b/src/NzbDrone.Core/Jobs/Scheduler.cs @@ -27,16 +27,6 @@ namespace NzbDrone.Core.Jobs _logger = logger; } - public void Handle(ApplicationStartedEvent message) - { - _cancellationTokenSource = new CancellationTokenSource(); - Timer.Interval = 1000 * 30; - Timer.Elapsed += (o, args) => Task.Factory.StartNew(ExecuteCommands, _cancellationTokenSource.Token) - .LogExceptions(); - - Timer.Start(); - } - private void ExecuteCommands() { try @@ -70,8 +60,19 @@ namespace NzbDrone.Core.Jobs } } + public void Handle(ApplicationStartedEvent message) + { + _cancellationTokenSource = new CancellationTokenSource(); + Timer.Interval = 1000 * 30; + Timer.Elapsed += (o, args) => Task.Factory.StartNew(ExecuteCommands, _cancellationTokenSource.Token) + .LogExceptions(); + + Timer.Start(); + } + public void Handle(ApplicationShutdownRequested message) { + _logger.Info("Shutting down scheduler"); _cancellationTokenSource.Cancel(true); Timer.Stop(); } diff --git a/src/NzbDrone.Core/Queue/QueueScheduler.cs b/src/NzbDrone.Core/Queue/QueueScheduler.cs index 39be36628..55a8d69e4 100644 --- a/src/NzbDrone.Core/Queue/QueueScheduler.cs +++ b/src/NzbDrone.Core/Queue/QueueScheduler.cs @@ -1,5 +1,6 @@ using System.Threading; using System.Threading.Tasks; +using NLog; using NzbDrone.Common.TPL; using NzbDrone.Core.Lifecycle; using NzbDrone.Core.Messaging.Events; @@ -11,12 +12,14 @@ namespace NzbDrone.Core.Queue IHandle { private readonly IEventAggregator _eventAggregator; + private readonly Logger _logger; private static readonly Timer Timer = new Timer(); private static CancellationTokenSource _cancellationTokenSource; - public QueueScheduler(IEventAggregator eventAggregator) + public QueueScheduler(IEventAggregator eventAggregator, Logger logger) { _eventAggregator = eventAggregator; + _logger = logger; } private void CheckQueue() @@ -47,6 +50,7 @@ namespace NzbDrone.Core.Queue public void Handle(ApplicationShutdownRequested message) { + _logger.Info("Shutting down queue scheduler"); _cancellationTokenSource.Cancel(true); Timer.Stop(); } diff --git a/src/NzbDrone.Host/ApplicationServer.cs b/src/NzbDrone.Host/ApplicationServer.cs index 4d1af5f06..946334ec6 100644 --- a/src/NzbDrone.Host/ApplicationServer.cs +++ b/src/NzbDrone.Host/ApplicationServer.cs @@ -1,6 +1,8 @@ -using System.ServiceProcess; +using System; +using System.ServiceProcess; using NLog; using NzbDrone.Common.EnvironmentInfo; +using NzbDrone.Common.Processes; using NzbDrone.Core.Configuration; using NzbDrone.Core.Lifecycle; using NzbDrone.Core.Messaging.Events; @@ -22,10 +24,17 @@ namespace NzbDrone.Host private readonly PriorityMonitor _priorityMonitor; private readonly IStartupContext _startupContext; private readonly IBrowserService _browserService; + private readonly IProcessProvider _processProvider; private readonly Logger _logger; - public NzbDroneServiceFactory(IConfigFileProvider configFileProvider, IHostController hostController, - IRuntimeInfo runtimeInfo, PriorityMonitor priorityMonitor, IStartupContext startupContext, IBrowserService browserService, Logger logger) + public NzbDroneServiceFactory(IConfigFileProvider configFileProvider, + IHostController hostController, + IRuntimeInfo runtimeInfo, + PriorityMonitor priorityMonitor, + IStartupContext startupContext, + IBrowserService browserService, + IProcessProvider processProvider, + Logger logger) { _configFileProvider = configFileProvider; _hostController = hostController; @@ -33,6 +42,7 @@ namespace NzbDrone.Host _priorityMonitor = priorityMonitor; _startupContext = startupContext; _browserService = browserService; + _processProvider = processProvider; _logger = logger; } @@ -43,6 +53,11 @@ namespace NzbDrone.Host public void Start() { + if (OsInfo.IsLinux) + { + Console.CancelKeyPress += (sender, eventArgs) => _processProvider.Kill(_processProvider.GetCurrentProcess().Id); + } + _runtimeInfo.IsRunning = true; _hostController.StartServer(); @@ -75,6 +90,11 @@ namespace NzbDrone.Host public void Handle(ApplicationShutdownRequested message) { + if (OsInfo.IsLinux) + { + _processProvider.Kill(_processProvider.GetCurrentProcess().Id); + } + if (!_runtimeInfo.IsWindowsService && !message.Restarting) { Shutdown(); diff --git a/src/NzbDrone.SignalR/NzbDronePersistentConnection.cs b/src/NzbDrone.SignalR/NzbDronePersistentConnection.cs index c30ee555f..815238022 100644 --- a/src/NzbDrone.SignalR/NzbDronePersistentConnection.cs +++ b/src/NzbDrone.SignalR/NzbDronePersistentConnection.cs @@ -14,7 +14,6 @@ namespace NzbDrone.SignalR } } - public void Execute(BroadcastSignalRMessage message) { Context.Connection.Broadcast(message.Body);