Поиск в лог-файле - код выхода
У меня есть несколько устаревших программ, которые мне нужно автоматизировать под Control-M. Эти работы находятся под Windows 2008R2.
Эти задания имеют код завершения 0, если они выполняются нормально, но также и если они могут справиться с некоторыми ошибками. Мне нужно поднять тревогу, когда конкретная строка в журнале.
Строка не находится в выводе исполняемого файла.
Я реализовал другую работу для этого. Идет поиск строки в файле, и в "Действиях при выполнении" я ищу оператор.
Чтобы иметь утверждение в выводе, я думаю использовать что-то вроде grep. Я использовал:
findstr
findstr "myerrorcode" D:\Log\greptest_%%$ODATE..log
grep
под Cygwin
В обоих случаях у меня одинаковая ситуация:
- Если строка найдена, все в порядке
- Если файл не найден или не может быть открыт, grep или findstr возвращают код выхода = 1. Это нормально, потому что задание должно вызвать ошибку.
Но проблема в том, что когда строка не найдена в файле, и grep, и findstr имеют код возврата = 1.
Как я могу различить случаи, когда файл не может быть открыт и когда все работает нормально, но sring в журнале не найден?
2 ответа
Вы должны быть в состоянии использовать 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, если линия выбрана, 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
Вы можете легко справиться с этим в Control-M: добавить на вкладку "Действие"
- Добавить "On Do Action"
- On: "Конкретный вывод оператора"
- Заявление (как состояние документации 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
Пример: On Do Action Control-M 8