Linux logrotate, как настроить logrotate на удаление всех логов старше месяца?

Решение, доказанное по следующему адресу, работает хорошо http://www.penguinproducer.com/Blog/2011/11/jack-alsa-bridge-kit

-121--243147-

Ncurses поставляется с командой reset , которая делает то же самое, что и stty sane . для получения более подробной информации см. man reset .

Кроме того, при щелчке правой кнопкой мыши на терминале во многих терминальных программах имеются опции Reset и/или Reset and Clear .

-121--128430-

Самый простой способ:

tar cfz bigtar.tar.gz /path/to/file1 /path/to/file2 ... /path/to/file20

При наличии совпадений между целевыми файлами можно использовать find для создания списка файлов и GNU tar -T ( -files-from ).

например. Если это все файлы .mp4:

find /path -type -f -iname '*.mp4' | tar cf bigtar.tar -T -

В противном случае, если нет простого образца для выбора имен файлов, вы можете использовать поиск для создания первоначального списка в файле tmpfile, отредактировать его вручную, чтобы удалить имена файлов, которые вы не хотите включать в tar, а затем использовать отредактированное имя tmpfile с параметром tar -T .

0
01.08.2018, 23:36
1 ответ

Шаблон на вашем logrotateникогда не будет соответствовать ни одному из именованных файлов с меткой времени. Вам нужно изменить его, чтобы соответствовать.

Попробуйте это:

/var/log/hive/*.log* {
    maxage 30
}

Посмотрите другие примеры

Посмотрите, как работают другие logrotateфайлы конфигурации:

$ grep 'var/log' /etc/logrotate.d/* | head
/etc/logrotate.d/aide:/var/log/aide/*.log {
/etc/logrotate.d/bootlog:/var/log/boot.log
/etc/logrotate.d/chrony:/var/log/chrony/*.log {
/etc/logrotate.d/cups:/var/log/cups/*_log {
/etc/logrotate.d/glusterfs:/var/log/glusterfs/*.log {
/etc/logrotate.d/glusterfs:/var/log/glusterfs/bricks/*.log {
/etc/logrotate.d/glusterfs:/var/log/glusterfs/samples/*.samp {
/etc/logrotate.d/iscsiuiolog:/var/log/iscsiuio.log {
/etc/logrotate.d/libvirtd:/var/log/libvirt/libvirtd.log {
/etc/logrotate.d/libvirtd.qemu:/var/log/libvirt/qemu/*.log {

постротация

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

Например, вы имеете дело с Hive, который является частью Hadoop. Все службы Hadoop имеют свои собственные log4j.propertiesфайлы, подобные этому:

$ grep Back /etc/hadoop/conf/log4j.properties
#log4j.appender.DRFA.MaxBackupIndex=30
log4j.appender.RFAS.MaxBackupIndex=${hadoop.security.log.maxbackupindex}
log4j.appender.NNMETRICSRFA.MaxBackupIndex=1
log4j.appender.RFA.MaxBackupIndex=10
log4j.appender.RMSUMMARY.MaxBackupIndex=20

В таких случаях я прибегаю к такой "очистке":

/var/log/hive/* {
  ifempty
  size 0

postrotate
            /usr/bin/find /var/log/hive -name "*log*" -type f -mtime +29 -exec rm -f {} \;

endscript
}

Выполнение этого таким образом позволяет использовать команду findв любом правиле дней, которое вы хотите использовать.

Тестирование

Чтобы убедиться в этом, я использовал следующие приемы.

пример данных
$ for i in {01..31};do touch -t 07${i}1200 /var/log/hive/file${i}.log;done
пробный запуск
$ logrotate -v /etc/logrotate.d/hive |& tail -10
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
renaming /var/log/hive/file31.log.1 to /var/log/hive/file31.log.2 (rotatecount 1, logstart 1, i 1),
old log /var/log/hive/file31.log.1 does not exist
renaming /var/log/hive/file31.log.0 to /var/log/hive/file31.log.1 (rotatecount 1, logstart 1, i 0),
old log /var/log/hive/file31.log.0 does not exist
log /var/log/hive/file31.log.2 doesn't exist -- won't try to dispose of it
renaming /var/log/hive/file31.log to /var/log/hive/file31.log.1
disposeName will be /var/log/hive/file31.log.1
running postrotate script
removing old log /var/log/hive/file31.log.1

ПРИМЕЧАНИЕ.:Можно безопасно удалить этот ifemptyи этот size 0. Я добавил их просто для работы с моими поддельными данными.

2
28.01.2020, 04:15

Теги

Похожие вопросы