web-dev-qa-db-ja.com

Windowsタスクスケジューラが失敗したときに通知するようにする

私は自分のウェブサイトから自分のローカルコンピュータへバックアップを引き出す自動スクリプトを持っています。このスクリプトは失敗する可能性があります。私のサーバーがダウンした後、また別の時に私は誤って自分のスクリプトを移動させました。

Windowsタスクスケジューラにスクリプトの失敗(または実行されない/見つからない)を通知する方法を教えてください。

プロンプトが表示されても、電子メールでも、デスクトップにも表示されても、問題ありません。問題が発生した場合は通知を受けたいです。私のサーバーでは、crontabがエラーについて私にEメールを送ります - これは素晴らしいことです。私は私のWindows 7のローカルコンピュータにそのようなものが欲しい。

65
user3109

スケジュールされたタスクが開始に失敗すると、イベントがTaskSchedulerイベントログに書き込まれます。

注:タスクスケジューラログは([管理ツール]の下)にあります。

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

enter image description here

Windowsでは、さまざまなイベントが発生したときにスケジュールされたタスクを開始することができます。

  • 時刻
  • システム起動
  • ユーザーログイン
  • イベントログに記録されたイベント

この知識を身に付けて、スケジュールされたタスクが失敗したときに実行されるスケジュールされたタスクを作成できます。

enter image description here

このスケジュールされたタスクのアクションは、あなたが選択した方法(例えばシャットダウンを引き起こす)であなたに警告を送る何かに設定することができます。あなたはそれにEメールを送ってほしいだけかもしれません:

enter image description here

これがWindowsがすべてを処理する方法です。ログに表示されるイベントをトリガーとする多くの診断タスクを見ることができます。例えばIPアドレスの競合が検出されると、イベントがログに書き込まれます。

  • Log:システム
  • 出典:Tcpip
  • イベントID:4198

スケジュールされたタスクがこのイベントをトリガーし、プログラムを実行してそれについて知らせ、修正します。イベントIDは1つのタスクだけに固有のものではないことに注意してください。イベント203 - アクションの開始に失敗したタスクが発生すると、このタスクがトリガーされます。

86
Ian Boyd

バックアップジョブの値が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
}
11
Hans Falk

PushMon を見てください。スクリプトの最後に呼び出されるPushMon URLを作成できます。サーバーがダウンしたため、またはスクリプトが移動されたためにスクリプトが実行されない場合は、通知を受け取ります。あなたは電子メール、SMS、電話、IM、Twitterで通知を受けることができます。これはどのオペレーティングシステムでも動作します。これはPingdomに似ていますが、スクリプトとバックグラウンドタスク用です。

7