8

我有一些遗留软件需要在 Control-M 下自动化。这些作业在 Windows 2008R2 下。

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

我为此实施了另一项工作。它会在文件中搜索一个字符串,然后在“On Do Actions”中搜索该语句。

要在输出中包含该语句,我认为可以使用grep之类的东西。我用了:

  • findstr

    findstr "myerrorcode" D:\Log\greptest_%%$ODATE..log
    
  • grepcygwin下

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

  • 如果找到字符串,一切正常
  • 如果文件未找到或无法打开,则 grep 或 findstr 返回退出代码 = 1。这没关系,因为作业必须引发错误。

但问题是:当文件中没有找到该字符串时,grep 和 findstr 都有一个返回码 = 1。

如何区分文件无法打开和一切运行正常但找不到日志中的sring的情况?

4

2 回答 2

3

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

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.

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

通常,如果选择了一行,则退出状态为 0,如果未选择任何行,则退出状态为 1,如果发生错误,则退出状态为 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
于 2018-01-22T16:50:39.383 回答
0

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

  1. 添加“执行操作”
  2. On:“特定语句输出”
  3. 声明(如 Control-M 文档状态):

一个字符串,长度为 1 到 132 个字符,包含来自作业脚本文件的语句 指定的字符串可以是语句的一部分。

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

* – represents any number of characters (including no characters)
$ – represents any single character
? – represents any single character
  1. 代码:

一个字符串,长度为 1 到 255 个字符,用于与操作系统对指定语句的响应进行比较。

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

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

示例: On Do Action Control-M 8

于 2018-02-05T16:14:27.580 回答