Архивирование логов по крону

Animegirl
На сайте с 03.04.2013
Offline
19
2158

Есть несколько папок, там идёт нескончаемый поток логов, все в отдельные файлы, не большого размера.

Имена файла с метками дат и времени, выглядит так "30.09.13_15.50.50.log".

Хотелось бы раз в час их паковать в "30.09.13_15.logs.расширение_архиватора"

Нужна команда в одну строку пихать все 3600 файлов в один архив и после удачного завершения, чистить файлы.

Посоветуйте какой формат взять, главный фактор для этой задачи - минимизация занимаемого места на диске, желательно при этом всё-таки проц сильно не перегружать на долго, чтоб не страдал сам сайт. Если не ошибаюсь время запаковывания и распаковывания разнятся в зависимости от формата, так вот на распаковывание наплевать, там торопится некуда.

Что бы не плодить темы: нужна так же команда, архивировать слепки базы, сделанные через xtrabackup. На сжатие не что бы пофиг, но не самый главный фактор, главнее наверное что бы архив записывал права файлов и их овнеров, время запаковки менее интересно, чем время распаковки.

Накидайте мне пожалуйста -10к репутации, и успокойтесь в поисках во мне иностранного агента, я просто новичок, который задаёт вопросы.
zexis
На сайте с 09.08.2005
Offline
388
#1

Вы не указали операционную систему.

Лучше пользоваться штатными средствами системы. А не изобретать свой велосипед.

В линукс это logrotate.

Также для апача и nginx есть общепринятые схемы ротации логов.

Animegirl
На сайте с 03.04.2013
Offline
19
#2
zexis:
Вы не указали операционную систему.
Лучше пользоваться штатными средствами системы. А не изобретать свой велосипед.
В линукс это logrotate.
Также для апача и nginx есть общепринятые схемы ротации логов.

Да, извиняюсь, я уже как типичный юзер винды, думаю, что раз раздел администрирование серверов, значит у всех линукс и скорее всего дебиан как у меня :D

А это не апачевские логи, а логи скрипта статистики.

Glueon
На сайте с 26.07.2013
Offline
172
#3

Тем не менее настоятельно рекомендуем использовать logrotate.

У него нет чего-то меньше, чем daily, поэтому можно убрать daily вообще, поставить size = 1 и вызывать из cron-а logrorate самому каждый час. Будет что-то типа:


/var/log/smth/*.log {
size 1
#Для того чтобы хранить неделю логов
rotate 168
compress
missingok
copytruncate
}
Есть много IP-сетей в аренду под прокси, парсинг, рассылки (optin), vpn и хостинг. Телега: @contactroot ⚒ ContactRoot команда опытных сисадминов (/ru/forum/861038), свой LIR: сдаем в аренду сети IPv4/v6 (/ru/forum/1012475).
Animegirl
На сайте с 03.04.2013
Offline
19
#4
Glueon:
Тем не менее настоятельно рекомендуем использовать logrotate.
У него нет чего-то меньше, чем daily, поэтому можно убрать daily вообще, поставить size = 1 и вызывать из cron-а logrorate самому каждый час. Будет что-то типа:

/var/log/smth/*.log {
size 1
#Для того чтобы хранить неделю логов
rotate 168
compress
missingok
copytruncate
}

Стоп стоп стоп, я ведь верно поняла команду, что он запихнёт туда все лог файлы? Не разбивая их по часам. Я просто ещё не решила, запускать раз в час или один раз где-нибудь ночью. Что-нибудь вроде "В 3 часа ночи, раскидать все логи за вчера с часовым шагом".

Glueon
На сайте с 26.07.2013
Offline
172
#5

В данном случае он будет все файлы *.log в директории каждый час "вращать". Создавай log.1, .log.2, ...

Формат файла можно менять. Например:


{
....
dateext
dateformat %Y-%m-%d.
....
}

Можно просто написать скрипт, который будет перемещать файл:


{
...
sharedscripts
postrotate
day=$(date +%Y-%m-%d)
mv ....
endscript
...
}
Animegirl
На сайте с 03.04.2013
Offline
19
#6

Вернулась к своим баранам, накидала такой вот файлик:


#!/bin/bash

MYDIR=$PWD

DIRS=`ls -l $MYDIR | egrep '^d' | awk '{print $9}'`

# DATE=$(date +%y.%m.%d_%H)
DATE="11.05.13_03"
for DIR in $DIRS
do
FILES="$MYDIR/${DIR}/$DATE"
ARCHIV="$MYDIR/${DIR}/$DATE.tar.gz"
tar cvwf - "$FILES*.log" | gzip -9 - > $ARCHIV
done

Проблема только в том, что архив создаётся, но файлов в нём нету (((

---------- Добавлено 16.11.2013 в 13:43 ----------

Есть папка с логами статистики выполнения скриптов, там под каждый скрипт своя папка, нужно внутри папок делать часовые архивы, опознаются файлы, по тому, что они тоже проименованы таймстампами. Алгоритм такой, что скрипт бежит по папкам, и архивирует файлы за предыдущий час. Сейчас зависла на том факторе, что файлы не сохраняются в архив ((

zexis
На сайте с 09.08.2005
Offline
388
#7

Нужно пошагово проверять результаты работы каждой команды.

На каждом шаге выводить результаты, например командой echo.

Не имея доступа к серверу этого не сделать.

На форуме вам покажут только направление, а уж отладкой вам нужно заниматься самому. Или нанимать кого то.

Zaqwr
На сайте с 08.08.2007
Offline
111
#8

Animegirl, кто этот файлик запускает и какое у запускающего $PWD, оно не отличается от места с логами?

---------- Добавлено 16.11.2013 в 17:20 ----------

устроит?

/bin/find /mnt/logs -type f -mtime -60 -name "*.log" -exec /usr/bin/xz -9 '{}' \;

Администрирование, Linux, Cisco, Juniper

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий