Процесс в сценарии bash, который я разрабатываю, часто тихо завершается с ошибкой (он продолжает работать без кода ошибки, но записывает ошибку в свой файл журнала).

Как только ошибка появляется в файле журнала, я хочу, чтобы процесс был перезапущен (и мониторинг файла журнала также продолжился). Когда процесс завершится, я хочу, чтобы остальная часть сценария была запущена.

Я много искал и много чего перепробовал с grep и tail, и если, в то время, трубы и т.д., Но я просто не могу заставить его работать.

Как правильно?

Вот что я в основном хочу, на воображаемом языке (не bash/shell):

:START
RUN error_prone_process
IF "Error text" ~/logfile.txt
   KILL error_prone_process
   GOTO START

2 ответа2

0

Ваша команда "Если" проверяет, является ли буквально слова "Текст ошибки" лог-файлом? Не совсем уверен, что попытка там, хотя ... Я бы использовал регулярные выражения:

if grep -x 'ErrorText' "$File"; then
   KILL error_prone_process
   GOTO START
fi
0

Если у вас есть доступ к конфигурации системы, рассмотрите возможность использования monit. Для мониторинга журналов я должен выполнить скрипт, который проверит журнал и запишет ОК или ОШИБКУ в другом файле. Затем я проверяю этот файл на предмет его длины и свежести.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .