循环 if 语句以在失败时重新启动服务
Looping the if statement to restart a service in case of failure
我有一个代码,我正在检查我在方法中作为参数传递的服务是否是 运行 然后停止它并以 10 秒的间隔启动它,基本上它只是重新启动方法。但是,是否可以使用带有计时器的循环,以便在停止后如果服务没有启动,继续尝试重新启动,直到 运行 再次返回。
我使用的库是System.ServiceProcess
这是我目前使用的方法。
public static bool RestartService(string serviceName)
{
bool result = false;
using (ServiceController controller = new ServiceController(serviceName))
{
try
{
if (controller.Status != ServiceControllerStatus.Stopped)
{
controller.Stop();
controller.WaitForStatus(ServiceControllerStatus.Stopped,
TimeSpan.FromSeconds(10));
}
if (controller.Status != ServiceControllerStatus.Running)
{
controller.Start();
controller.WaitForStatus(ServiceControllerStatus.Running,
TimeSpan.FromSeconds(10));
}
if (controller.Status == ServiceControllerStatus.Running)
{
result = true;
}
}
catch (Exception ex)
{
_logger.Error($"RestartService {serviceName} failed,
exception_message: {ex.Message}");
}
}
return result;
}
是否可以使用带计时器的循环,以便在服务未启动时停止后继续尝试重新启动,直到 运行 再次返回。
可以从 Timer
调用该方法(这可能是个好主意,以便它在后台运行)。
将您的代码转换为重试直到成功就像将 if
更改为 while
一样简单:
public static bool RestartService(string serviceName)
{
bool result = false;
using (ServiceController controller = new ServiceController(serviceName))
{
try
{
while (controller.Status != ServiceControllerStatus.Stopped)
{
controller.Stop();
controller.WaitForStatus(ServiceControllerStatus.Stopped,
TimeSpan.FromSeconds(10));
}
while (controller.Status != ServiceControllerStatus.Running)
{
controller.Start();
controller.WaitForStatus(ServiceControllerStatus.Running,
TimeSpan.FromSeconds(10));
}
result = true;
}
catch (Exception ex)
{
_logger.Error($"RestartService {serviceName} failed,
exception_message: {ex.Message}");
}
}
return result;
}
我有一个代码,我正在检查我在方法中作为参数传递的服务是否是 运行 然后停止它并以 10 秒的间隔启动它,基本上它只是重新启动方法。但是,是否可以使用带有计时器的循环,以便在停止后如果服务没有启动,继续尝试重新启动,直到 运行 再次返回。
我使用的库是System.ServiceProcess
这是我目前使用的方法。
public static bool RestartService(string serviceName)
{
bool result = false;
using (ServiceController controller = new ServiceController(serviceName))
{
try
{
if (controller.Status != ServiceControllerStatus.Stopped)
{
controller.Stop();
controller.WaitForStatus(ServiceControllerStatus.Stopped,
TimeSpan.FromSeconds(10));
}
if (controller.Status != ServiceControllerStatus.Running)
{
controller.Start();
controller.WaitForStatus(ServiceControllerStatus.Running,
TimeSpan.FromSeconds(10));
}
if (controller.Status == ServiceControllerStatus.Running)
{
result = true;
}
}
catch (Exception ex)
{
_logger.Error($"RestartService {serviceName} failed,
exception_message: {ex.Message}");
}
}
return result;
}
是否可以使用带计时器的循环,以便在服务未启动时停止后继续尝试重新启动,直到 运行 再次返回。
可以从 Timer
调用该方法(这可能是个好主意,以便它在后台运行)。
将您的代码转换为重试直到成功就像将 if
更改为 while
一样简单:
public static bool RestartService(string serviceName)
{
bool result = false;
using (ServiceController controller = new ServiceController(serviceName))
{
try
{
while (controller.Status != ServiceControllerStatus.Stopped)
{
controller.Stop();
controller.WaitForStatus(ServiceControllerStatus.Stopped,
TimeSpan.FromSeconds(10));
}
while (controller.Status != ServiceControllerStatus.Running)
{
controller.Start();
controller.WaitForStatus(ServiceControllerStatus.Running,
TimeSpan.FromSeconds(10));
}
result = true;
}
catch (Exception ex)
{
_logger.Error($"RestartService {serviceName} failed,
exception_message: {ex.Message}");
}
}
return result;
}