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

Написание сценария bash для очистки журналов apache

У меня есть два каталога (~ / www / и ~ / client-sites /), которые содержат кучу сайтов, каждый с файлами access.log и error.log.

Как проще всего найти все эти файлы и очистить их содержимое? Они быстро растут, поэтому я хотел бы очищать журналы примерно раз в месяц.

Установите logrotate (Windows см. http://sourceforge.net/projects/logrotatewin):

# CentOS/RHEL
yum install logrotate
# Debian/Ubuntu
apt-get install logrotate

Создать / Редактировать /etc/logrotate.d/httpd, Пример взят из CentOS, требуется настройка для других дистрибутивов.

/var/log/httpd/*_log {
    weekly
    missingok
    rotate 5
    compress
    delaycompress
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
        /etc/init.d/httpd reload > /dev/null
    endscript
}

Тоа действительно делают то, что вы просили

find ~/www/ and ~/client-sites/ \( -name 'access.log' -o -name 'error.log' \) \
    -exec sh -c '> "$1"' -- {} \;

Это обрежет каждый файл, соответствующий любому имени файла в любых подкаталогах, до 0 байтов.

Веб-сервер apache поставляется с утилитой под названием rotatelogs, который можно использовать для управления файлами журнала.

Да, его почти не используют в дистрибутивах.
Нет, они не знают лучшего - они просто невежественны.