Мне нужно что-то, что работает в фоновом режиме как служба (Windows), наблюдает за определенным процессом, и когда он пересекает пороги, он перезапускает / останавливает / запускает процесс снова? (похожая функциональность rubygem называется " бог ")

У меня есть программное обеспечение для сетевой камеры, которое работает как сервер, но не поддерживает работу в качестве службы Windows. Он также перестает отвечать один раз в день. Когда это происходит, я вижу, что объем памяти падает ниже 10 МБ. Обычно это около 20-30 МБ в оперативной памяти.

1 ответ1

1

Если вы знакомы с C #, вы можете попробовать использовать фоновый рабочий для мониторинга процесса и перезапустить его, когда у вас возникнут проблемы.

Например, что-то похожее у меня (для приложения с графическим интерфейсом) выглядит следующим образом

private void startServer()
    {
        if (this.CancellationPending == true)
        {
            Console.WriteLine("Termination of {0} requested", thisServer.serverSettings.serverName);
            this.ReportProgress(100);
            this.Dispose(true);
        }
        else
        {
            try
            {
                thisServer.serverStatus = status.Starting;
                using (Process p = Process.Start(thisServer.serverStartInfo))
                {
                    thisServer.serverProc = p;
                    p.WaitForInputIdle(thisServer.serverSettings.startupDuration.Milliseconds);
                    thisServer.serverStatus = status.Running;

                    while (p.Responding)
                    {
                       // happy days
                    }

                    thisServer.serverStatus = status.Unknown;
                    try
                    {
                        p.Close();
                        thisServer.serverStatus = status.Offline;
                    }
                    catch 
                    {
                        try
                        {
                            p.Kill();
                            thisServer.serverStatus = status.Offline;
                        }
                        catch { }
                    }
                }

                reRun();
            }
            catch
            {
                thisServer.serverStatus = status.Offline;
                ReportProgress(100, "Error encountered when attempting to launch executable. Please review server settings.");
            }
        }
    }

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .