Сделать Windows Task Scheduler предупредить меня о сбое

65

У меня есть автоматический скрипт, который загружает резервные копии с моего сайта на мой локальный компьютер. Этот сценарий может потерпеть неудачу; как только мой сервер не работал, в другой раз я случайно переместил свой скрипт.

Как заставить планировщик заданий Windows сообщать мне, что сценарий не работает (или не запускается / не найден)?

Мне все равно, появляется ли приглашение, электронное письмо или что-то, что появляется на моем рабочем столе. Я хочу получать уведомления, если что-то пойдет не так. На моем сервере crontab пишет мне об ошибках - и это здорово. Я хочу что-то подобное на моем компьютере с Windows 7.

Элиран Малка
источник
нашел как минимум идентификаторы событий планировщика задач mnaoumov.wordpress.com/2014/05/15/task-scheduler-event-ids

Ответы:

87

Когда запланированная задача не запускается, событие записывается в журнал событий TaskScheduler :

Примечание. Журнал планировщика заданий находится в (в разделе «Администрирование»).

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

введите описание изображения здесь

Windows позволяет запускать запланированные задачи, когда происходят различные события, например:

  • время суток
  • запуск системы
  • Логин пользователя
  • событие записывается в журнал событий

Вооружившись этими знаниями, вы можете создать запланированное задание, которое будет запускаться при сбое запланированного задания:

введите описание изображения здесь

Запланированное задание в действие может быть установлено на то , что посылает вам предупреждение - в выборе методов (например , вызывает отключение). Возможно, вы просто захотите отправить электронное письмо:

введите описание изображения здесь

Вот как Windows обрабатывает все. Вы можете увидеть множество диагностических задач, которые запускаются при появлении события в журнале. например, когда обнаружен конфликт IP-адресов, в журнал записывается событие:

  • Журнал: Система
  • Источник: Tcpip
  • Код события: 4198

Запланированное задание запускается в этом событии и запускает программу, чтобы сообщить вам об этом и исправить это. Имейте в виду, что идентификатор события не относится только к одной задаче. Любая задача, которая генерирует событие 203 - Действие не удалось запустить, вызовет эту задачу.

Ян Бойд
источник
2
Вы получаете идентификатор события из журнала событий (203 и 103). Вы можете увидеть идентификаторы событий на скриншоте (203 и 103). Или я могу сказать вам идентификаторы событий: 203 и 103.
Ян Бойд
5
Что делать, если второе задание не выполнено!?!?
Уильям Джексон
3
@WilliamJackson Создайте событие, которое выключит машину. Кто-то определенно будет предупрежден о проблеме тогда.
Ян Бойд
11
На самом деле, если 2-е задание завершится неудачей, оно запустит 2-ое задание, которое не выполнится, которое запустит 2-е задание, которое не выполнится, которое запустит 2-е задание, которое ... вы поймете идею. Я только что выяснил это трудным путем = /
Роб Пенридж
6
Это не предупредит вас, если задача не будет выполнена , только если она не запустится . Не совсем то же самое.
JWG
11

Вот мой сценарий, чтобы предупредить меня, когда мое задание резервного копирования имеет значение больше 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
}
Ханс Фальк
источник
Это хороший вариант, так как текущий выбранный ответ использует устаревшую функцию Windows.
Джон Харгроув
Помните, что это специально разработанное решение для пользователей Windows на английском языке. Аргумент для «findstr» должен быть изменен в соответствии с языком пользователя, установленным в Windows.
Eda190
7

Посмотрите на PushMon . Вы можете создать PushMon URL, который будет вызываться в конце вашего скрипта. Если ваш сценарий не запускается из-за того, что сервер не работает или сценарий был перемещен, вы получите уведомление. Вы можете получать уведомления по электронной почте, SMS, по телефону, IM и Twitter. Это будет работать для любой операционной системы. Это похоже на Pingdom, но для скриптов и фоновых задач.

Биенвенидо Давид
источник
1
Если вы добавляете его в конец вашего сценария, а сценарий отсутствует (например, перемещен), как он должен вызываться?
Боб
3
Поскольку сценарий перемещен, а URL не вызывается, вы получите предупреждение.
Биенвенидо Дэвид
1
Пытаясь посетить их сайт; по иронии судьбы, это, кажется, вниз ..
Исаак Кляйнман