Как упаковать в архивы все логи на сервере

Однажды можно обнаружить, что логи веб-сервера разбухают до сотней мегабайт, а то и больше. Было бы странно самостоятельно регулярно их удалять, тем более, если сайтов на сервере больше десятка. Тем более, что хочется старые логи упаковать в архивы. На помощь нам приходит так называемая ротация логов. В Linux для этого есть logrotate. Возможно, он то, как раз вам и нужен. Прочитать о ротации логов можно в статье на OpenNET. Но для меня он не подошёл, и в этой статье я расскажу о другом варианте ротации логов с помощью bash.

Постановка задачи

Необходимо упаковать все логи на веб-сервере, не только самого Apache, но и логи, создаваемые проектами, в архивы. Архивы должны находиться рядом с логами, в имени архивов фигурируют имена логов и дата создания архивов. После создания архивов, логи нужно удалить, а Apache перезапустить. И выполнять это регулярно в автоматическом режиме.

Что для этого понадобится

Ничего, кроме стандартных программ Linux. Будем использовать cron, tar и bash. И какой-нибудь редактор, например, mcedit или nano, кому-то удобнее vim =)

Подразумевается, что мы выполняем все действия из под root. А содержимое веб-сервера (вместе со всеми логами Apache) для простоты изложения расположено в /var/www/. Для вашего случая, возможно, потребуется внести корректировки в скрипты.

Если у вас не Ubuntu, то вместо «service apache2 stop/start» укажите команды, соответствующие вашему дистрибутиву для остановки и запуска веб-сервера соответственно.

Ход работы

1. Создадим скрипт с именем, например, /var/www/clearlogs.sh:

mcedit /var/www/clearlogs.sh

Скопипастим в него следующее:

#!/bin/sh
service apache2 stop
find /var/www -type f -name "*.log" -exec tar --remove-files -czf '{}'_`date +%d.%m.%y`.tar.gz '{}' \;
service apache2 start

Сохраняем.

2. Теперь вызовем редактирование задач планировщика cron:

crontab -e

И добавим в конец задачу для запуска этого скрипта в 12 часов каждого понедельника, не забыв после этого добавить пустую строку:

0 12 * * 1 sh /var/www/clearlogs.sh

Сохраняем и убеждаемся, что задача добавлена:

root@tooogriki:/var/www# crontab -e

crontab: installing new crontab

crontab -l

root@tooogriki:/var/www# crontab -l
0 12 * * 1 sh /var/www/clearlogs.sh

3. Проверим работоспособность, выполнив скрипт:

sh /var/www/clearlogs.sh

И убедившись, что рядом с пустыми логами (в случае Apache) и удалёнными (в остальных случаях) появились архивы имя_лога.ДД.ММ.ГГ.tag.gz.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *