LOGROTATE продолжает вращаться и сжать уже вращаемые журналы

Я думаю, это то, что вам нужно,

sed -n '/<tag>/,/<\/tag>/p' file.xml | head -10

Попробуйте выполнить команду ниже, чтобы получить первые две строки, которые начинаются с ,

$ sed -n '/^<tag>/p' file.xml | head -2
<tag><t1>john</t1></tag>
<tag><t1>john</t1></tag>
2
08.01.2019, 20:35
2 ответа

Для меня то, о чем вы спрашиваете, вполне нормально. Предположим, у вас есть три файла file1.log, file2.log and file3.logвнутри папки в /var/log/remote/, и вы хотите ежедневно менять их местами и сохранять последние 10 сжатыми. Вы можете сделать это следующим образом:

  1. Создайте файл в /etc/logrotate.d/myfiles.
  2. Вставьте в него следующее содержимое.

    /var/log/remote/*.log
    {
    rotate 10
    daily
    sharedscripts
    missingok
    compress
    }

  3. Вы можете протестировать его, запустив logrotateв режиме отладки.

    logrotate -d /etc/logrotate.d/myfiles

  4. Если вы действительно хотите выполнить это сейчас.

    logrotate -f /etc/logrotate.d/myfiles

0
27.01.2020, 22:17

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

/var/log/remote/*/*[0-9]

Проблема, с которой вы столкнулись, заключается в том, что logrotateвероятно, параметр createустановлен по умолчанию, что означает, что после поворота файла журнала (он переименовывается и, возможно, сжимается ), новый файл журнала с оригинальным названием. Этого можно избежать, используя опцию nocreate.

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

Это могло бы сработать, если бы вы могли убедить все, что создает эти файлы журналов, иметь некоторый префикс, такой как «log -», чтобы имена стали «log -2019 -01 -09» и т. д. Теперь вы может сказать logrotateиспользовать dateextи dateformat -%Y-%m-%d, и, надеюсь, это обманет logrotate, предполагая, что часть даты была создана самим logrotate. Затем конфигурация становится примерно такой:

/var/log/remote/*/log {
    nocreate
    dateext
    dateformat -%Y-%m-%d
    delaycompress
}

Однако на вашем месте я бы не стал заставлять logrotateобрабатывать эти файлы журналов, которые ведут себя не так, как ожидает logrotate. Я бы свернул свой собственный скрипт истечения срока действия журнала, что-то вроде:

#!/bin/sh
DAYS=90
TOPDIR=/var/log/remote
cd $TOPDIR
for i in *; do
    if ! [ -d $TOPDIR/$i ]; then
        continue
    fi
    cd $TOPDIR/$i
    find -maxdepth 1 -type f -name '????-??-??' -mtime +1 -exec gzip {} \;
    find -maxdepth 1 -type f -name '????-??-??.gz' -mtime +$DAYS -delete
done
1
27.01.2020, 22:17

Теги

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