Назад | Перейти на главную страницу

Сжать все файлы журналов apache, на которые не указывают символические ссылки

Проблема в том, что для сайта с низким трафиком access.log символическая ссылка теперь мертва, потому что файл, на который она указывала, был переименован gzip. В результате fail2ban отказывается от этих тюрем, потому что он больше не может обрабатывать файлы.

Решение состоит в том, чтобы сжимать только те файлы журналов, для которых нет символической ссылки.

Я нашел способ сделать это, и он работает, но я хотел бы знать, есть ли более простой способ сделать это, потому что он действительно сложен и не очень быстр ( find в find).

    find /var/log/apache2/ -daystart -mtime +0 \( -name "*access*.log" -or -name "*error*.log" \) -type f -exec sh -c 'test `find /var/log/apache2/ -lname {} | wc -l` -eq 0' \; -exec gzip {} \;

Возможно что-то вроде этого:

LOGDIR=/path/to/log/files
CURRENT=$(stat -c "%N" $LOGDIR/access.log | sed -e "s/.* -> //" -e "s/[\`']//g")

for logfile in $(find $LOGDIR -type f -name \*.log)
do
  if [ "$logfile" != "$LOGDIR/$CURRENT" ]
  then
    gzip $logfile
  fi
done

Может потребоваться модификация в зависимости от ваших конкретных требований и расположения файлов.