Translate

субота, 11 січня 2014 р.

Script for reading file from last position

Цей скрипт можна використовувати для підрахунку кількості певних значень в текстовому файлі, проте не з початку файлу, а лише з моменту останньої перевірки, тобто зі збереженням позиції. Він може бути корисним у випадку коли необхідно просканувати великий лог помилок (наприклад, 1 ГБ тексту) для відображення останніх значень в системі моніторингу чи щось на зразок цього, адже переглядати повний лог заново буде затратно по ресурсам.

  1. #!/bin/bash
  2.  
  3. DATE=$(date +%Y-%m-%d)
  4.  
  5. PREV_LINE_STAT=/tmp/prev_last_line.tmp
  6. LOG_ORG=/var/log/exim4/main/log
  7. LINE=$(cat $LOG_ORG | wc -l)
  8. LOG=/tmp/log.tmp
  9.  
  10. if [ -f $PREV_LINE_STAT ]
  11. then
  12.         PREV_LINE=$(cat $PREV_LINE_STAT)
  13. else
  14.         PREV_LINE=0
  15. fi
  16.  
  17. declare -i LINE_RANGE
  18. LINE_RANGE=$LINE-$PREV_LINE
  19.  
  20.  
  21. if [ $LINE_RANGE -lt 0 ]
  22. then
  23.         LINE_RANGE=$LINE
  24. fi
  25.  
  26. tail -n $LINE_RANGE log > $LOG
  27.  
  28. echo $LINE_RANGE
  29.  
  30. for domain in "@mail.ru" "@yandex.ru" "@rambler.ru" "@gmail.com" "@ukr.net" "@yahoo.com"do
  31.         #Sent to separate domains
  32.         COUNT1=$(exigrep $domain $LOG | grep -E $DATE.*\"2[0-9][0-9] | wc -l)
  33.         COUNT2=$(exigrep $domain $LOG | grep -E $DATE.*:\ 5[0-9][0-9] | wc -l)
  34.  
  35.         echo "delivered to $domain"
  36.         echo $COUNT1
  37.         echo "deny by $domain"
  38.         echo $COUNT2
  39.  
  40. done
  41.  
  42. echo $LINE > $PREV_LINE_STAT


Даний скрипт буде виводити із логу Exim к-ть успішно відправлених листів (200-ті коди) та не відправлених (500-ті коди) для доменів mail.ru, yandex.ru, rambler.ru, gmail.com, ukr.net. Кожного наступного разу статистика буде виводитись лише для нових записів у журналі за допомогою утиліти tail, що може виводити лише певні рядки текстового файлу.

Немає коментарів:

Дописати коментар