tail -f к нескольким файлам, переданным по каналу «пока читается», дает неожиданные результаты - PullRequest
0 голосов
/ 21 сентября 2018

Я написал быстрый bash-скрипт для отслеживания нескольких файлов журнала и отправки их содержимого в чат Mattermost.Это скрипт:

#!/bin/bash 

# HOOKS
hook1=...#Mattermost hook
hook2=...#Mattermost hook
hook3=...#Mattermost hook

date=$1
year=$2

unbuffer tail -f -n0 /var/log/$year/hook1_*$date.log \
  /var/log/$year/hook2_*$date.log \
  /var/log/$year/hook3_*$date.log | grep "ERROR" | while read -r msg
  do
    if [[ $msg = *"hook1"* ]]
    then
      hook=$hook1
    elif [[ $msg = *"hook2"* ]]
    then
      hook=$hook2
    else
      hook=$hook3
    fi
    msg=$(echo "$msg" | sed -r "s/\"/\\\\\"/g")
    curl -i -X POST --data-urlencode "payload={\"text\": \"$msg\"}" $hook

  done

Часть sed экранирует кавычки, поэтому я могу заменить сообщение на curl.

Однако во время выполнения возникают некоторые проблемы:

  • Похоже, что в htop после 2 раз запускается 2 процесса.
  • Иногда сообщения не отправляются в Mattermost по мере их появления, но вместо этого они появляются партиями.
  • Иногда появляются сообщениявырезать и часть содержимого теряется.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...