Faça o Agendador de tarefas do Windows me alertar sobre falha

65

Eu tenho um script automatizado que extrai backups do meu site para o meu computador local. Este script pode falhar; quando meu servidor estava inoperante, outra vez acidentalmente movi meu script.

Como faço para o Windows Task Scheduler me dizer que o script falhou (ou não é executado / não foi encontrado)?

Não me importo se um prompt aparecer, um email ou algo que apareça na minha área de trabalho. Quero ser notificado se algo der errado. No meu servidor, o crontab me envia um e-mail sobre erros - o que é ótimo. Eu quero algo assim no meu computador local com Windows 7.

Eliran Malka
fonte
localizou os IDs de evento do planejador de tarefas pelo menos mnaoumov.wordpress.com/2014/05/15/task-scheduler-event-ids

Respostas:

87

Quando uma tarefa agendada falha ao iniciar, um evento é gravado no log de eventos TaskScheduler :

Nota: O log do Agendador de Tarefas está localizado em (em Ferramentas Administrativas)

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

insira a descrição da imagem aqui

Windows permite que você acionar tarefas agendadas para começar quando uma variedade de eventos acontecem, por exemplo:

  • hora do dia
  • inicialização do sistema
  • login de usuário
  • evento registrado no log de eventos

Armado com esse conhecimento, você pode criar uma tarefa agendada que será executada quando sua tarefa agendada falhar:

insira a descrição da imagem aqui

A ação dessa tarefa agendada pode ser definida como algo que envia um alerta - na sua escolha de métodos (por exemplo, aciona um desligamento). Você pode apenas querer enviar um e-mail:

insira a descrição da imagem aqui

É assim que o Windows lida com tudo. Você pode ver muitas tarefas de diagnóstico que são acionadas em um evento que aparece no log. por exemplo, quando um conflito de endereço IP é detectado, um evento é gravado no log:

  • Log: Sistema
  • Fonte: Tcpip
  • ID do Evento: 4198

Uma tarefa agendada é acionada nesse evento e executa um programa para informá-lo e corrigi-lo. Lembre-se de que o ID do evento não é específico para apenas uma tarefa. Qualquer tarefa que gere o evento 203 - Ação falhou ao iniciar, acionará esta tarefa.

Ian Boyd
fonte
2
Você obtém a identificação do evento no log de eventos (203 e 103). Você pode ver os IDs do evento na captura de tela (203 e 103). Ou eu posso dizer-lhe o ID de evento de: 203 e 103.
Ian Boyd
5
O que você faz se a segunda tarefa falhar!?!?
William Jackson
3
@WilliamJackson Crie um evento que encerre a máquina. Alguém será definitivamente alertado para um problema então.
Ian Boyd
11
Na verdade, se a 2ª tarefa falhar, ela iniciará a 2ª tarefa que falhará, que iniciará a 2ª tarefa que falhará, que iniciará a 2ª tarefa que irá ... você entendeu a idéia. Acabei de descobrir isso da maneira mais difícil = /
Rob Penridge 19/10/12
6
Isso não alerta se uma tarefa falha , apenas se ela falha ao iniciar . Não 'e a mesma coisa.
precisa saber é
11

Aqui está o meu script para me alertar quando meu trabalho de backup tiver um valor maior 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
fonte
Essa é uma boa opção, pois a resposta selecionada atualmente usa um recurso obsoleto do Windows.
John Hargrove
Lembre-se de que esta é uma solução criada especificamente para usuários com Windows no idioma inglês. O argumento para 'encontrar' deve ser alterado de acordo com o idioma do usuário definido no Windows.
Eda190
7

Dê uma olhada no PushMon . Você pode criar um URL PushMon que será chamado no final do seu script. Se o seu script não executar porque o servidor estava inoperante ou o script foi movido, você será notificado. Você pode ser notificado por e-mail, SMS, telefonema, mensagem instantânea e Twitter. Isso funcionará para qualquer sistema operacional. É como o Pingdom, mas para scripts e tarefas em segundo plano.

Bienvenido David
fonte
11
Se você adicioná-lo ao final do seu script e o script está faltando (por exemplo, mudou-se), como é suposto a obter called‽
Bob
3
Como o script foi movido e o URL não foi chamado, você receberá um alerta.
Bienvenido David
11
Tentando visitar o site deles; ironicamente, parece ser baixo ..
Isaac Kleinman