在致命崩溃后重新启动服务
本文关键字:重新启动 服务 崩溃 | 更新日期: 2023-09-27 18:15:30
我有几个服务在99.9%的时间内正确运行。然而,它们与网络和数据库一起工作,偶尔会出现我没有预料到的错误,使其进入代码并导致服务崩溃。在这种情况下,重新启动服务通常可以解决问题。
我的服务创建了一个运行主代码的新线程。我在服务类中添加了错误处理,该服务类捕获并记录来自此线程的任何未处理的异常。我想知道的是,如果我可以调用OnStop,然后OnStart从服务类重新启动我的服务?
我使用的代码位于与OnStart和OnStop相同的类中。我把它贴在下面:
private void ExceptionHandler(object sender, UnhandledExceptionEventArgs args)
{
log.Append("Fatal Exception:'n" + args.ExceptionObject);
eventLog.WriteEntry(log.ToString());
log = new StringBuilder();
OnStop();
if (numberOfCrashes++ < 10)
{
Thread.Sleep(60000);
OnStart(null);
log.Append("The service has been restarted " + numberOfCrashes + " times.");
eventLog.WriteEntry(log.ToString());
log = new StringBuilder();
}
}
我想知道的是,如果我可以调用OnStop,然后OnStart从重新启动我的服务的服务类?
这将取决于如何实现OnStart
和OnStop
逻辑。
例如,如果你的OnStart
能够确定工作头是否已经启动,如果是,它停止并重新启动它,那么是的,你可以通过直接调用这些方法来模拟服务重启。
因此,您在OnStart
和OnStop
上的实际代码是您问题的正确答案,这取决于您对其进行重构以满足您的需求,即在不重新启动服务的情况下在操作系统级别重新启动服务。