Shell Script для проверки логов и запуска программы - PullRequest
0 голосов
/ 30 сентября 2011

У меня есть этот скрипт, который проверяет последнюю строку файла newlog.log, и если он находит слово Stream closed, он должен запустить программу test.jar, потому что он остановился бы и, следовательно, записал Stream closed в журнал файл.

#!/bin/sh
SUCCESS=0 
while (true);
do
sleep 5
tail -1 ~newlog.log | grep -q "Stream closed" .
if  [$? -eq 1]
then 
java -jar test.jar &
fi
done

Я получаю ошибку:

run.sh: 11: [1: not found

Скажите, пожалуйста, есть ли какая-то синтаксическая ошибка или что?

Ответы [ 3 ]

0 голосов
/ 02 октября 2011

Вместо использования состояния выхода команды grep сохраняйте выходные данные в переменной и зацикливайтесь, пока длина не станет ненулевой.

Grep вернет состояние выхода 0, даже если не вернет никакого вывода.

var1 = tail -1 ~newlog.log | grep -q "Stream closed"

до [-n "$ {var1}"];

сделать

  echo "Sleeping for next 5 seconds"

  sleep 5

сделано

java -jar test.jar &
0 голосов
/ 25 февраля 2012

Первоначальная ошибка '[1', вызванная тем, что OP не ставит пробелы в квадратных скобках в операторе if.

Кажется, что команда tail возвращает код выхода 1. Оператор if долженбыть

if [ $? -eq 1 ]
then

...

и не

if [$? -eq 1]
then

....

0 голосов
/ 30 сентября 2011

Я думаю, вы можете использовать

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