Журнал монитора в реальном времени на наличие ошибок. Если ошибка = повторно запустить команду и перезапустить мониторинг журнала, если не найден = сохранить мониторинг навсегда

559
NewsGuy

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

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

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

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

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

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

2 ответа на вопрос

0
Antony T.

Your 'If' Command is checking to see if literally the words "Error text" is the logfile? Not entirely sure the attempt there though... I would use regex:

if grep -x 'ErrorText' "$File"; then KILL error_prone_process GOTO START fi 
GOTO не существует в bash, это был просто пример того, что я не знаю, как делать правильно (чтобы блок кода повторялся). Grep также недостаточно, поскольку он будет запускать grep для всего файла журнала, а не только для последних строк. Комбинация Tail и grep может работать, но я понятия не имею, как бы я реализовал это в самоповторяющемся блоке кода. Регулярное выражение также не нужно, достаточно обычного grep для соответствующей части текста. Тем не менее, спасибо за ответ. NewsGuy 7 лет назад 0
Можете ли вы отредактировать исходное сообщение, включив в него фактическую попытку кода и, возможно, фрагмент из журнала ошибок? Это довольно неоднозначно, и вы хотите конкретный ответ. Вы обычно пишете этот лог-файл? Если это так, если вы добавите нумерацию строк, это может сделать это просто Antony T. 7 лет назад 0
0
le_top

If you have access to the system configuration, consider using monit. To monitor logs, I have monit execute a script that will check the log and write OK or ERROR in another file. I then check that file for file length and freshness.

Спасибо, но я хочу, чтобы этот скрипт был относительно переносимым. Такие простые вещи не должны требовать внешней зависимости. Я не хочу следить за файлом журнала 24/7, только когда работает скрипт. NewsGuy 7 лет назад 0