2008-11-17 19 views
35

Estoy buscando una manera de controlar ciertos servicios de Windows (en Windows Server 2003) y reiniciar si es necesario y. Los servicios se encuentran en servidores diferentes e incluyen principalmente servicios de SQL Server (por ejemplo, el Agente de SQL Server), pero también algunos servicios propietarios.Cómo supervisar los servicios de Windows

Las alertas de correo electrónico enviadas si un servicio se ha detenido también serían muy útiles.

Respuesta

39

Una versión "podría ser suficiente" está integrada en Windows. Mire en la pestaña "Recuperación" de las propiedades del servicio, como está disponible en services.msc.

Puede actuar sobre un servicio fallan con:

  • "reiniciar el servicio"
  • "Ejecutar un Progam"
  • "Reiniciar el equipo"

"Ejecutar un programa "podría ser un pequeño script que envía un correo electrónico, por ejemplo.

Si desea una solución más grande con un panel de información general y todo, hay muchas soluciones de monitoreo del sistema disponibles. Por ejemplo, me viene a la mente SolarWinds IPMonitor, o Nagios, o Cacti.

+0

Cómo establecer este comportamiento a través de C# API? – YakRangi

6

Pueden ser algunas herramientas dedicadas, pero solo quiero señalar la herramienta wmic.

wmic /node:[hostname] service list 

es capaz de enumerar los servicios de cualquier equipo

WMIC SERVICE where caption='TELNET' CALL STARTSERVICE 

sería reiniciar el servicio Telnet.

Si encapsula wmic en un lenguaje de script (capaz de enviar correo electrónico), puede tener la herramienta de supervisión que está buscando.

0

¿Le interesará un producto Blade Logic llamado Blade Logic Configuration Manager? No es gratis pero puede hacer mucho más que monitorear servicios de Windows. Mirar por encima. Se hará todo lo que pidió en su pregunta y más

13

Si usted está interesado en algunos .NET programación, System.ServiceProcess El espacio de nombres proporciona clases que le permiten implementar, instalar y controlar las aplicaciones de servicio de Windows.

ejemplo simple, comprobación e iniciar un servicio en C#:

var srv = new ServiceController("MyService"); 
Console.WriteLine("MyService Status {0}", srv.Status); 
if (srv.Status != ServiceControllerStatus.Running) 
    srv.Start(); 
3

Esto depende de exactamente lo que desea supervisar:

  • un servicio se detiene realmente tan lejos como el control de servicios (SCM) está preocupado.
  • Un servicio se ha bloqueado sin que el SCM esté al tanto, esto es muy común debido al enhebrado.
  • Un servicio se colgó sin que el SCM esté al tanto, también es muy común.

Para el primer elemento, puede configurar el servicio para iniciar una secuencia de comandos que envía una alerta de correo electrónico. Tenga en cuenta que esto puede ser realmente molesto si el servicio se reinicia debido a circunstancias fuera de su control (dependencia de una conexión de red escamosa, o lo que sea).

Para los otros dos elementos, necesitará algún tipo de servicio de latido, que puede compilar o comprar. Tenga cuidado de que el monitor de latido se ejecute localmente en los servicios que supervisa porque, como escribí hace un tiempo, the network is not reliable.

1

+1 para asegurarse de que los servicios se supervisan en la máquina local.

Algo así como Service Hawk puede controlar sus servicios y reiniciarlos si se detienen y le envía una alerta por correo electrónico. También podría considerar programar reinicios periódicos ya que, como se menciona en otro póster, el servicio no siempre aparece como "detenido" en lo que respecta al SCM. En esos casos, el servicio se cuelga, congela o se arruina y se reinicia el servicio de vez en cuando con un horario que lo mantiene funcionando sin problemas. Simplemente borra la memoria, etc. y le da un nuevo comienzo.

Cuestiones relacionadas