Demander au planificateur de tâches Windows de m'alerter en cas d'échec


65

J'ai un script automatisé qui extrait les sauvegardes de mon site Web sur mon ordinateur local. Ce script pourrait échouer. une fois mon serveur en panne, une autre fois, j'ai accidentellement déplacé mon script.

Comment faire en sorte que le planificateur de tâches Windows me dise que le script échoue (ou ne s'exécute pas / n'est pas trouvé)?

Je ne me soucie pas si une invite apparaît, un email ou quelque chose qui apparaît sur mon bureau. Je veux être averti si quelque chose ne va pas. Sur mon serveur, crontab m'envoie des informations sur les erreurs, ce qui est excellent. Je veux quelque chose comme ça sur mon ordinateur local Windows 7.


trouvé les ID d'événement de planificateur de tâches au moins mnaoumov.wordpress.com/2014/05/15/task-scheduler-event-ids

Réponses:


87

Lorsqu'une tâche planifiée ne parvient pas à démarrer, un événement est écrit dans le journal des événements TaskScheduler :

Remarque: le journal du planificateur de tâches se trouve à l'adresse (sous Outils d'administration).

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

entrez la description de l'image ici

Windows vous permet de déclencher le démarrage des tâches planifiées lorsque divers événements se produisent, par exemple:

  • moment de la journée
  • démarrage du système
  • Utilisateur en ligne
  • événement enregistré dans le journal des événements

Fort de ces connaissances, vous pouvez créer une tâche planifiée qui s'exécute lorsque votre tâche échoue:

entrez la description de l'image ici

L' action de cette tâche planifiée peut ensuite être définie sur quelque chose qui vous envoie une alerte - dans votre choix de méthodes (par exemple, déclenche un arrêt). Vous voudrez peut-être simplement envoyer un e-mail:

entrez la description de l'image ici

C’est ainsi que Windows gère tout. Vous pouvez voir de nombreuses tâches de diagnostic qui se déclenchent lorsqu'un événement apparaît dans le journal. Par exemple, lorsqu'un conflit d'adresse IP est détecté, un événement est écrit dans le journal:

  • Journal: système
  • Source: Tcpip
  • ID d'événement: 4198

Une tâche planifiée se déclenche sur cet événement et exécute un programme pour vous en informer et le corriger. N'oubliez pas que l'ID d'événement n'est pas spécifique à une tâche. Toute tâche générant l'événement 203 - Echec du démarrage de l'action déclenchera cette tâche.


2
Vous obtenez l' ID d'événement du journal des événements (203 et 103). Vous pouvez voir l'identifiant de l'événement sur la capture d'écran (203 et 103). Ou je peux vous dire l'identifiant de l'événement: 203 et 103.
Ian Boyd Le

5
Que faites-vous si la deuxième tâche échoue!?!?
William Jackson

3
@WilliamJackson Créez un événement qui éteint la machine. Quelqu'un sera certainement alerté d'un problème alors.
Ian Boyd

11
En fait, si la deuxième tâche échoue, elle lancera la deuxième tâche qui échouera qui lancera la deuxième tâche qui échouera et qui lancera la deuxième tâche qui ... vous aurez l'idée. Je viens de découvrir cela à la dure = /
Rob Penridge

6
Cela ne vous alerte pas si une tâche échoue , mais seulement si elle ne démarre pas . Pas tout à fait la même chose.
Jwg

11

Voici mon script pour me prévenir lorsque mon travail de sauvegarde a une valeur supérieure à 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 = "mymail@gmail.com"
    $Pass = ConvertTo-SecureString -String "myPassword" -AsPlainText -Force
    $Cred = New-Object System.Management.Automation.PSCredential $User, $Pass
################################################################################

$From = "Alert Scheduled Task <mymail@gmail.com>"
$To = "Me Gmail <mymail@gmail.com>"
$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
}

C'est une bonne option, car la réponse actuellement sélectionnée utilise une fonctionnalité Windows déconseillée.
John Hargrove

N'oubliez pas qu'il s'agit d'une solution spécialement conçue pour les utilisateurs de Windows en anglais. L'argument pour 'findstr' doit être modifié en conséquence dans la langue de l'utilisateur définie dans Windows.
Eda190

7

Jetez un coup d'oeil à PushMon . Vous pouvez créer une URL PushMon qui sera appelée à la fin de votre script. Si votre script ne s'exécute pas parce que le serveur était en panne ou s'il a été déplacé, vous en serez averti. Vous pouvez être averti par email, SMS, appel téléphonique, messagerie instantanée et Twitter. Cela fonctionnera pour tout système d'exploitation. C'est comme Pingdom mais pour les scripts et les tâches en arrière-plan.


1
Si vous l'ajoutez à la fin de votre script et que celui-ci est manquant (par exemple, il a été déplacé), comment est-il censé s'appeler
Bob

3
Étant donné que le script a été déplacé et que l'URL n'a pas été appelée, vous recevrez une alerte.
Bienvenido David

1
Essayer de visiter leur site; Ironie du sort, il semble être en panne ..
Isaac Kleinman
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.