AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 33108
In Process
user10992
user10992
Asked: 2009-06-29 22:28:52 +0800 CST2009-06-29 22:28:52 +0800 CST 2009-06-29 22:28:52 +0800 CST

当 Windows 计划任务失败时收到警报

  • 772

如果一组 Windows 2003 服务器上的任何计划任务失败(退出状态码不是 0),我正在寻找一种方法来获得警报。脚本、商业应用程序和监控工具(如 Nagios)的插件都可以考虑。

ActiveXperts 网络监视器出现在大多数搜索结果中,但计划任务监视功能只是大型商业网络监视包的一小部分。

下面是一个批处理文件脚本,它将计划任务结果转储到一个 csv 文件中,该文件可以使用 SSIS 导入 SQL Server。

rem MC: dump the scheduled task results into the specified outfile
@echo off

set outfile=c:\temp\scheduled_tasks.csv

rem MC: the for loop skips over the first blank that schtasks adds to the output
for /f "TOKENS=*" %%A in ('schtasks /query /fo csv /v') do ( echo %%A >> %outfile% )

这种方法的缺点是,将 csv 文件导入数据库表,运行查询以查找不为 0 的状态代码,并在发现任何内容时发送带有警报的电子邮件,这似乎是一个繁琐的设置。我宁愿使用现有的解决方案,也不愿从头开始创建复杂的自定义系统。

windows-server-2003 scheduled-task alerts
  • 5 5 个回答
  • 13024 Views

5 个回答

  • Voted
  1. John Rennie
    2009-06-29T22:34:28+08:002009-06-29T22:34:28+08:00

    我这样做是计划工作的一部分。我运行的所有计划作业都是脚本。即使它是一个图形应用程序,我也会从 .bat 文件启动它。所有脚本都包含错误检查,并且它们使用 osql 将一行附加到“作业监控”表中。然后表上的一个查询告诉我哪些作业成功、失败或(由左连接提供)没有报告任何状态。我在自己的工作站上将此查询作为计划作业运行,它会向我发送一份报告。

    JR

    • 2
  2. Evan Anderson
    2009-06-30T03:41:19+08:002009-06-30T03:41:19+08:00

    使用 ADODB 自己解析“schtasks”的输出。

    这是一个小的 VBScript 程序,它将使用预制的 IF/THEN 块解析输出,“最后结果”不等于零,“状态”为“无法启动”。您可以根据需要编写更多条件,并替换代码以根据需要对故障条件采取行动。

    Option Explicit
    
    ' ADO Constants
    Const adCmdText = 1
    Const adLockOptimistic = 3
    Const adOpenStatic = 3
    
    ' Path to text file and filename
    Const FILEPATH = "C:\WINDOWS\TEMP"  ' Don't append "\"
    Const FILENAME = "tasks.csv"
    
    Dim x, objShell, objConn, objRS, dictFields, Field
    
    ' Write output of schtasks to file
    Set objShell = CreateObject("WScript.Shell")
    objShell.Run "%COMSPEC% /c schtasks /query /fo csv /v > """ & FILEPATH & "\" & FILENAME & """", 1, True
    
    ' Connect recordset to CSV file
    Set objConn = CreateObject("ADODB.Connection")
    Set objRS = CreateObject("ADODB.Recordset")
    
    objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FILEPATH & ";Extended Properties=""text;HDR=YES;FMT=CSVDelimited"""
    objRS.Open "SELECT * FROM " & FILENAME, objConn, adOpenStatic, adLockOptimistic, adCmdText
    
    ' Load header into dictionary - Prefer to do this in case format changes in future version of Windows
    Set dictFields = CreateObject("Scripting.Dictionary")
    
    x = 0
    For Each Field in objRS.Fields
        dictFields.Add Ltrim(Rtrim(Field)), x
        x = x + 1
    Next ' Field
    objRS.MoveNext
    
    Do Until objRS.EOF
    
        ' Check last status for something other than 0
        If objRS.Fields.Item(dictFields("Last Result")) <> 0 Then 
            WScript.Echo "Scheduled Task " & objRS.Fields.Item(dictFields("TaskName")) & " returned status of " & objRS.Fields.Item(dictFields("Last Result"))
        End If
    
        ' Check "Status" for "Could Not Start"
        If NOT IsNull(objRS.Fields.Item(dictFields("Status"))) Then
            If UCase(objRS.Fields.Item(dictFields("Status"))) = "COULD NOT START" Then  
                WScript.Echo "Scheduled Task " & objRS.Fields.Item(dictFields("TaskName")) & " could not start"
            End If
        End If
    
        objRS.MoveNext
    Loop
    
    • 2
  3. Joseph Kern
    2009-06-30T03:18:59+08:002009-06-30T03:18:59+08:00

    您还可以查看运行计划任务/脚本服务器。我使用AdTempus。

    您还可以生成大量报告和警报。您甚至可以生成工作流程图。

    • 0
  4. KAPes
    2009-06-30T16:04:55+08:002009-06-30T16:04:55+08:00

    更改bat文件中的行有帮助吗?

    echo dump不成功的任务,会dump不成功的任务名称和状态码

    For /F "skip=2 Tokens=1-10 Delims=," %%A in ('schtasks /query /fo csv /v') do if %%G NEQ 0 Echo %%A --} %%G
    
    • 0
  5. Encoderer
    2015-01-07T18:08:39+08:002015-01-07T18:08:39+08:00

    这里的一个问题是,如果任务因为服务器被软管而没有运行,那么对该服务器的任何监控也会失败。

    查看https://cronitor.io。这是一项针对计划作业的简单监控服务,听起来正是您正在寻找的。

    • 0

相关问题

  • 如何使用脚本远程重启 Windows 服务?

  • IIS 6.0 (Windows Server 2003) 上的 HTTP 压缩

  • 从 2003 年迁移到 2008 年 Microsoft 群集技术

  • 有什么理由使用 Windows Server 2003 而不是 Server 2008?

  • 在 Windows Server 2003 下使用 wscipt 从 .asp 文件运行 .exe

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve