在日志文件中搜索

我有一些传统软件需要在Control-M下自动运行。 这些工作都在Windows 2008R2之下。

如果它们运行正常,这些作业的退出代码为0,但是如果它们可以管理一些错误。 当特定的字符串在日志中时,我需要发出警报。
该字符串不在可执行文件的输出中。

我为此执行了另一项工作。 它会搜索文件中的字符串,然后在“执行操作”中搜索该语句。

要在输出中声明我认为使用类似grep的东西。 我用了:

  • findstr

    findstr "myerrorcode" D:Loggreptest_%%$ODATE..log
    
  • cygwin下的grep

  • 在这两种情况下,我都有相同的情况:

  • 如果找到字符串,万物都可以
  • 如果文件未找到或无法打开,则grep或findstr会返回退出代码= 1.这没关系,因为作业必须引发错误。
  • 但问题是:当在文件中找不到字符串时,grep和findstr都有一个返回码= 1。

    当文件无法打开并且一切运行正常时,如何区分这些情况,但是未找到日志中的sring?


    您应该能够使用grep的退出状态来检测失败的原因。 根据POSIX grep文档,退出状态部分:

    EXIT STATUS
    
       The following exit values shall be returned:
    
       0    One or more lines were selected.
       1    No lines were selected.
       >1   An error occurred.
    

    它与GNU grep类似(一致,但更具体):

    正常情况下,如果选择了一条线,退出状态为0,如果未选择线,则退出状态为2,如果发生错误,退出状态为2。 [...]其他grep实现可能会以大于2的状态退出。

    例如,在bash ,可以使用case命令来处理多个分支,如下所示:

    #!/bin/bash
    
    # search for error code in file
    grep code file
    
    # store the exit status in variable err
    err=$?
    
    # test several cases
    case $err in
        0) echo All good.;;
        1) echo Code not found.;;
        *) echo Error reading from file.;;
    esac
    

    您可以轻松地在Control-M中处理此操作:添加作业选项卡“操作”

  • 添加“关于执行操作”
  • 开:“特定语句输出”
  • 声明(作为Control-M文档状态):
  • 一个长度为1到132个字符的字符串,包含作业脚本文件中的语句指定的字符串可以是该语句的一部分。

    语句字符串可以包含掩码字符。 有效的掩码字符是:

    * – represents any number of characters (including no characters)
    $ – represents any single character
    ? – represents any single character
    
  • 码:
  • 字符串,长度为1到255个字符,与操作系统对指定语句的响应进行比较。

    代码字符串可以包含掩码字符。 有效的掩码字符是:

    * – represents any number of characters (including no characters)
    $ – represents any single character
    ? – represents any single character
    

    示例:执行操作控制-M 8

    链接地址: http://www.djcxy.com/p/41219.html

    上一篇: Search in logfile

    下一篇: binary modules vs. script modules