Hacer que el Programador de tareas de Windows me avise si falla

65

Tengo un script automatizado que extrae copias de seguridad de mi sitio web a mi computadora local. Este script podría fallar; una vez que mi servidor estaba caído, otra vez accidentalmente moví mi script.

¿Cómo hago para que el Programador de tareas de Windows me diga que el script falla (o no se ejecuta / no se encuentra)?

No me importa si aparece un mensaje, un correo electrónico o algo que aparece en mi escritorio. Quiero ser notificado si algo sale mal. En mi servidor, crontab me envía un correo electrónico sobre errores, lo cual es genial. Quiero algo así en mi computadora local con Windows 7.

Eliran Malka
fuente
encontró los ID de evento del planificador de tareas al menos mnaoumov.wordpress.com/2014/05/15/task-scheduler-event-ids

Respuestas:

87

Cuando una tarea programada no se inicia, se escribe un evento en el registro de eventos de TaskScheduler :

Nota: El registro del Programador de tareas se encuentra en (en Herramientas administrativas)

 Computer Management
    System Tools
       Event Viewer
          Application and Services Logs
             Microsoft
                Windows
                   Task Scheduler
                      Operational

ingrese la descripción de la imagen aquí

Windows le permite activar las tareas programadas para que comiencen cuando ocurren una variedad de eventos, por ejemplo:

  • hora del dia
  • inicio del sistema
  • inicio de sesión de usuario
  • evento registrado en el registro de eventos

Armado con este conocimiento, puede crear una tarea programada que se ejecute cuando su tarea programada falle:

ingrese la descripción de la imagen aquí

La acción de esta tarea programada se puede configurar en algo que le envíe una alerta, en su elección de métodos (por ejemplo, desencadena un apagado). Es posible que solo desee que envíe un correo electrónico:

ingrese la descripción de la imagen aquí

Así es como Windows maneja todo. Puede ver muchas tareas de diagnóstico que se desencadenan en un evento que aparece en el registro. por ejemplo, cuando se detecta un conflicto de dirección IP, se escribe un evento en el registro:

  • Registro: sistema
  • Fuente: Tcpip
  • Id. De evento: 4198

Se desencadena una tarea programada en este evento y ejecuta un programa para informarle y solucionarlo. Tenga en cuenta que la identificación del evento no es específica para una sola tarea. Cualquier tarea que genere el evento 203 - No se pudo iniciar la acción, activará esta tarea.

Ian Boyd
fuente
2
Obtiene la identificación del evento del registro de eventos (203 y 103). Puede ver la identificación del evento en la captura de pantalla (203 y 103). O puedo decirte los ID del evento: 203 y 103.
Ian Boyd
55
¿Qué haces si la segunda tarea falla?
William Jackson
3
@WilliamJackson Crea un evento que apaga la máquina. Definitivamente, alguien será alertado de un problema.
Ian Boyd
11
En realidad, si la segunda tarea falla, se iniciará la segunda tarea que fallará y se iniciará la segunda tarea que fallará y se iniciará la segunda tarea que ... usted tiene la idea. Me acabo de enterar de la manera difícil = /
Rob Penridge
66
Esto no le alerta si una tarea falla , solo si no puede iniciarse . No es exactamente lo mismo.
jwg
11

Aquí está mi script para alertarme cuando mi trabajo de copia de seguridad tiene un valor mayor que 0.

$ScheduledTaskName = "Hans\Backup"
$Result = (schtasks /query /FO LIST /V /TN $ScheduledTaskName  | findstr "Result")
$Result = $Result.substring(12)
$Code = $Result.trim()

If ($Code -gt 0) {
    $User = "[email protected]"
    $Pass = ConvertTo-SecureString -String "myPassword" -AsPlainText -Force
    $Cred = New-Object System.Management.Automation.PSCredential $User, $Pass
################################################################################

$From = "Alert Scheduled Task <[email protected]>"
$To = "Me Gmail <[email protected]>"
$Subject = "Scheduled task 'Backup' failed"
$Body = "Error code: $Code"
$SMTPServer = "smtp.gmail.com"
$SMTPPort = "587"

Send-MailMessage -From $From -to $To -Subject $Subject `
-Body $Body -SmtpServer $SMTPServer -port $SMTPPort -UseSsl `
-Credential $Cred
}
Hans Falk
fuente
Esta es una buena opción, ya que la respuesta seleccionada actualmente usa una característica de Windows obsoleta.
John Hargrove
Tenga en cuenta que esta es una solución específicamente diseñada para usuarios con Windows en inglés. El argumento para 'findstr' debe cambiarse de acuerdo con el idioma del usuario establecido en Windows.
Eda190
7

Echa un vistazo a PushMon . Puede crear una URL PushMon que se llamará al final de su secuencia de comandos. Si su script no se ejecuta porque el servidor estaba inactivo o el script se movió, se le notificará. Puede recibir notificaciones por correo electrónico, SMS, llamada telefónica, mensajería instantánea y Twitter. Esto funcionará para cualquier sistema operativo. Esto es como Pingdom pero para scripts y tareas en segundo plano.

Bienvenido David
fuente
1
Si se agrega al final de su guión, y el guión no se encuentra (por ejemplo, desplazado), ¿cómo se supone que debe llegar called‽
Bob
3
Como el script se movió y no se llamó a la URL, recibirá una alerta.
Bienvenido David
1
Intentando visitar su sitio; irónicamente, parece estar abajo ..
Isaac Kleinman