2015-12-01 3 views
2

Один из моих проектов «Makefile запускает кучу тестов в безгласном браузере для функционального тестового шага. Большая часть теста предназначена для интерфейсного кода, но я также проверяю на наличие ошибок/предупреждений на бэкэнд.лучший способ проверить журналы после команды Makefile

В настоящее время мы очищаем журнал веб-сервера, выполняем все (очень медленные) тесты, а затем grepping в журнале сервера для любой ошибки или предупреждения.

Мне было интересно, есть ли способ прослушать прослушиватель журнала (например, tail -f | grep), начиная с фона, и убить цель make, если она обнаруживает какую-либо ошибку/предупреждение во время тестового прогона.

, что я получил до сих пор был

  1. начать долгоживущих Grep в фоновом режиме и хранить PID.
  2. испытания.
  3. контрольная выработка долгоживущих grep
  4. kill PID.
  5. при любой ошибке, неисправность.

Это только купило мне то преимущество, что теперь я не теряю журналы сервера в своем блоке dev каждый раз, так как мне не нужно их чистить каждый раз. Но я все еще должен ждать много времени (минут) для отказа, который мог произойти в самом первом.

есть какое-либо решение?

+0

Используйте что-то более гибкое, чем 'grep'? Как 'awk' или insert-favorite-scripting-language, который может запускать произвольные команды по совпадениям по мере их возникновения? –

+0

@ EtanReisner, что должно быть хорошо, я действительно не забочусь о grep или нет. Но до сих пор неясно, как захватить сообщение журнала из awk или что-то еще, после того, как выложите его в фоновом режиме. – gcb

+0

Хм? awk может напрямую выполнять команды, поскольку он обрабатывает свой вход и может выйти, когда это необходимо. –

ответ

1

мне было интересно, есть ли способ, чтобы слушатель разборе журнала (например, tail -f | grep), начиная от фона, и убить цель грим, если он обнаружит какие-либо ошибки/предупреждения во время тестового прогона.

Вы пробовали сделать это простым простым способом? Как это, например:

# make is started somehow, e.g.: 
make target >make-target.log 2>&1 & 
PIDOFMAKE=$! 
# we know its PID and the log file name 

tail -f make-target.log | grep 'ERROR!' | 
while read DUMMY; do 
    # error was detected, kill the make: 
    kill $PIDOFMAKE 
    break 
done 

(Хотя это мне не ясно, что OP спрашивает, я пишу ответ, так как я не могу поставить много кода в комментарии.)

+1

Я не забочусь о выходе модели. я забочусь о журнале вне команды.например: я хочу проверить 'logs/apache.err', в то время как в make-файле выполняется тестирование против веб-приложения. это будет 'tail -f logs/apache.err | grep ERROR' работает, пока я запускаю тесты 'selenium test ...'. – gcb

Смежные вопросы