, , ,

Programar el reinicio de servidores con aviso por correo cuando vuelven a estar en línea

·

Programar el reinicio de servidores con aviso por correo cuando vuelven a estar en línea

Programar el reinicio de los servidores es una práctica saludable: permite aplicar actualizaciones y ayuda a liberar memoria. Hay muchas formas de hacerlo; en este recordatorio os explico cómo lo hice yo. El ejemplo funciona con Windows Server 2003, 2008, 2008 R2, 2012, 2012 R2, 2016…

Primero elegí uno de los servidores para enviar la orden de reinicio al resto. En mi caso, el controlador de dominio principal. Como tenemos muchos servidores y no se pueden reiniciar todos a la vez, hice grupos de reinicio. Vosotros podéis hacer lo mismo, con tantos grupos como haga falta.

Para los avisos por correo usé SendEmail, un programa gratuito que envía correos desde la línea de comandos. Solo hay que descargarlo y descomprimirlo en una carpeta, por ejemplo C:\Scripts.

Preparé un fichero llamado reboot_alert_group1.cmd en C:\Scripts con un aviso por correo parecido a este:

reboot_alert_group1.cmd

c:\Scripts\sendemail.exe -f noreply@MyDomain.com -t MyEmail@MyDomain.com -u "Starting Server restart tasks 1" -m "Now we are restarting servers: Server01, Server02, Server03" -s smtp.office365.com:587 -xu ValidMail@MyDomain.com -xp MyEmailPassword

Como veis, no tiene ningún secreto:

sendemail.exe -f "remitente" -t "destinatario" -u "asunto" -m "mensaje" -s "servidor SMTP" -xu "usuario para autenticarse en el SMTP" -xp "contraseña de ese usuario"

Después preparé otro fichero, restart_servers_group1.cmd, que llama a reboot_alert_group1.cmd y envía la orden de reinicio a los servidores con PowerShell:

restart_servers_group1.cmd

call reboot_alert_group1.cmd
powershell restart-computer "Server01","Server02","Server03" -force

Antes de ejecutarlo, os recomiendo comprobar el acceso remoto a esos servidores con PowerShell. Abrid la línea de comandos, ejecutad powershell y probad este comando, cambiando Server01 por el nombre del servidor que queréis probar:

PS C:\Scripts> gwmi win32_networkadapterconfiguration -computername Server01 -filter "ipenabled = 'true'" -erroraction stop | select dnshostname,ipaddress,defaultipgateway,dnsserversearchorder,winsprimaryserver,winssecondaryserver | ft -property * -autosize | out-string -Width 4096

Si funciona, ya lo tenéis. Si da un error de conexión, probablemente tendréis que permitir la «Administración remota» desde vuestra IP en el cortafuegos del servidor.

Programad las tareas de reinicio de esta forma y repetidlo para cada grupo de servidores:

Crear una tarea en el Programador de tareas

Configuración general de la tarea de reinicio

Desencadenador de la tarea de reinicio

Acción de la tarea: ejecutar restart_servers_group1.cmd

Condiciones de la tarea de reinicio

Configuración adicional de la tarea de reinicio

Para recibir un aviso cuando los servidores vuelven a estar en línea usaremos el mismo programa, SendEmail. Solo hay que copiar sus ficheros en C:\Scripts en cada servidor y preparar un fichero con el mensaje. En mi caso, rebootalert.cmd:

rebootalert.cmd

c:\Scripts\sendemail.exe -f noreply@MyDomain.com -t MyEmail@MyDomain.com -u "Server01 has booted by scheduled task" -m "Server01 has booted by scheduled task!" -s smtp.office365.com:587 -xu ValidMail@MyDomain.com -xp MyEmailPassword

Y en cada servidor creamos una tarea programada que ejecute rebootalert.cmd al arrancar:

Tarea de aviso al arrancar: configuración general

Tarea de aviso: desencadenador al iniciar el sistema

Tarea de aviso: detalle del desencadenador

Tarea de aviso: acción que ejecuta rebootalert.cmd

Tarea de aviso: detalle de la acción

Tarea de aviso: condiciones

Tarea de aviso: configuración

Tarea de aviso: resumen final

Nota: estos ficheros .cmd contienen la contraseña de la cuenta de correo en texto plano. Proteged la carpeta con permisos NTFS para que solo tengan acceso los administradores.

¡Y eso es todo!

Traducción hecha con ayuda de IA a partir del artículo original.