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

Logrotate создает длинные имена и не удаляет журналы

postgres_db_dump_20091016.gz.1.1.1.1.1.1.1.1.1.1.1-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021
postgres_db_dump_20091017.gz.1.1.1.1.1.1.1.1.1.1.1-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021
postgres_db_dump_20091018.gz.1.1.1.1.1.1.1.1.1.1-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021
postgres_db_dump_20091019.gz.1.1.1.1.1.1.1.1.1.1-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021
postgres_db_dump_20091020.gz.1.1.1.1.1.1.1.1.1-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021
postgres_db_dump_20091021.gz.1.1.1.1.1.1.1.1.1-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021

Это пример вывода (имена файлов), когда я принудительно запускаю logrotate. Как-то не распознает старые файлы.

Пример вывода отладки:

glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding old rotated logs failed
renaming /var/backup/postgres/postgres_db_dump_20091019.gz.1.1.1.1.1.1.1.1.1.1-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021 to /var/backup/postgres/postgres_db_dump_20091019.gz.1.1.1.1.1.1.1.1.1.1-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021
rotating log /var/backup/postgres/postgres_db_dump_20091020.gz.1.1.1.1.1.1.1.1.1-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021, log->rotateCount is 4
dateext suffix '-20091021'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding old rotated logs failed
renaming /var/backup/postgres/postgres_db_dump_20091020.gz.1.1.1.1.1.1.1.1.1-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021 to /var/backup/postgres/postgres_db_dump_20091020.gz.1.1.1.1.1.1.1.1.1-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021
rotating log /var/backup/postgres/postgres_db_dump_20091021.gz.1.1.1.1.1.1.1.1.1-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021, log->rotateCount is 4
dateext suffix '-20091021'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding old rotated logs failed
renaming /var/backup/postgres/postgres_db_dump_20091021.gz.1.1.1.1.1.1.1.1.1-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021 to /var/backup/postgres/postgres_db_dump_20091021.gz.1.1.1.1.1.1.1.1.1-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021

И файл конфигурации:

daily
rotate 4
create 666 root root
maxage 30
dateext
compress
missingok
notifempty
noolddir

# system-specific logs may be also be configured here.
/var/log/* {
    size=10M
    postrotate 
        /usr/bin/killall -HUP syslog-ng
    endscript
}

/var/backup/postgres/postgres* {
    nocompress
    nocreate
}
/var/log/* {
    size=10M
    postrotate 
        /usr/bin/killall -HUP syslog-ng
    endscript
}

В /var/log/* это твоя проблема. Это соответствует всем файлам в / var / log, включая уже сжатые файлы. Вам нужно будет уточнить этот шаблон соответствия глобуса, чтобы он соответствовал только несжатым файлам.

На странице руководства для logrotate говорится:

   Please  use wildcards with caution.  If you specify *, logrotate will rotate all files,
   including previously rotated ones.  A way around this is to use the olddir directive or
   a more exact wildcard (such as *.log).

Остальные ответы здесь верны, вам нужно изменить, какие файлы соответствуют вашей конфигурации. Та же проблема может возникнуть с файлами в / var / log, но комбинация сжатия и ограничения размера 10M не позволяет этому случиться.

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

Вы можете сделать две вещи. Первый вариант - настроить postgres или любой другой сценарий, создающий этот файл дампа, чтобы не использовать дату. Сохранение единообразия имени файла позволит logrotate сделать это и удалить старые. В качестве альтернативы вы можете полностью пропустить logrotate и поместить что-то вроде этого в свой crontab:

0 4 * * * find /var/backup/postgres/postgres_db_dump_*.gz -mtime +10 -delete

Это будет запускаться каждую ночь и удалять файлы дампа старше 10 дней.