Как перезапустить скрипт на основе сообщения журнала - PullRequest
0 голосов
/ 06 октября 2019

У меня есть приложение Java, и я хочу перезапустить его, когда в журнале появляется определенное сообщение. До сих пор я пробовал следующий скрипт:

#!/bin/bash

java -jar app.jar > app.log 2>&1
tail -f app.log | while read LOGLINE
do
   [[ "${LOGLINE}" == *"channel incative"* ]] && pkill -P $$ java &&  java -jar app.jar > app.log 2>&1
done

Я запускаю сценарий с помощью следующей команды

nohup sh app.sh &

Но он работает не так, как ожидалось. Есть ли у вас какие-либо предложения?

ps java-приложение является устаревшим приложением от третьей стороны, поэтому я не могу выполнить логику в самом коде приложения.

1 Ответ

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

Когда в журнале найдена строка «канал инклюзивный», убейте Java и перезапустите скрипт. Файл журнала очищается, поэтому строку «канал» можно искать снова. Используйте сон, чтобы дать Java-процессу немного времени для смерти.

#!/bin/bash
sleep 1
java -jar app.jar > app.log 2>&1
rm app.log 2> /dev/null
touch app.log
tail -f app.log | while read LOGLINE
do
   [[ "${LOGLINE}" == *"channel incative"* ]] && pkill -P $$ java && exec app.sh
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...