Сценарий оболочки для запуска процесса в фоновом режиме, анализа его вывода и запуска службы, если предыдущий процесс содержит строку - PullRequest
0 голосов
/ 19 октября 2019

Мне нужно написать скрипт оболочки, который запускает процесс в фоновом режиме и анализировать его вывод, пока он не проверит, что вывод не содержит ошибок в своем выводе. Процесс будет продолжать работать в фоновом режиме, так как он должен прослушивать порты. Если в выходных данных процесса содержалась ошибка, закройте сценарий.

На основании выходных данных предыдущего процесса (в нем не было ошибок, процесс смог установить соединение с БД), выполните следующую команду.

Я перепробовал множество подходов, предложенных для переполнения стека, в том числе:

/home/build/a_process 2>&1 | tee "output_$(date +"%Y_%m_%d").log"
tail -fn0 "output_$(date +"%Y_%m_%d").log" | \
while read line ; do
if [ echo "$line" | grep "Listening" ]
then
/home/build/b_process 2>&1 | tee "output_script_$(date +"%Y_%m_%d").log"
elif [ echo "$line" | grep "error occurred in load configuration" ] || [ echo "$line" | grep "Binding Failure" ]
then
sl -e
fi
done

Проблема в том, что процесс продолжает работать, несмотря на то, что он содержит текст, который я искал, он застревает при разборе просмотра и никогда не может выйти, наблюдая за выводом или выводом. В результате он не может выполнить следующую команду.

1 Ответ

0 голосов
/ 19 октября 2019

На поверхности проблема в команде "tee" (a_process ... | tee).

Напомним, что конвейер приведет к оболочке

  1. Создание конвейерамежду командой
  2. Ожидание окончания команды LAST.

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

В этом случае рассмотрите возможность отправки всего конвейера в фоновый режим.

log_file=output_$(date +"%Y_%m_%d").log
( /home/build/a_process 2>&1 | tee "$logfile" ) &
tail -fn0 "$logfile" | 
...

Примечание: рассмотрите возможность установки файла журнала в переменную. Это облегчит поддержку (и понимание) сценария.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...