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
Процесс в сценарии bash, который я разрабатываю, часто тихо завершается с ошибкой (он продолжает работать без кода ошибки, но записывает ошибку в свой файл журнала).
Как только ошибка появляется в файле журнала, я хочу, чтобы процесс был перезапущен (и мониторинг файла журнала также продолжился). Когда процесс завершится, я хочу, чтобы остальная часть сценария была запущена.
Я много искал и много чего перепробовал с grep и tail, и если, в то время, трубы и т. Д., Но я просто не могу заставить его работать.
Как правильно?
Вот что я в основном хочу, на воображаемом языке (не bash / shell):
:START RUN error_prone_process IF "Error text" ~/logfile.txt KILL error_prone_process GOTO START
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
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.