Как я могу вращать много файлов журнала в другой подкаталог за вращение?

12

У меня есть каталог со многими файлами журналов, каждый из которых я хотел бы менять ежедневно. В организационных целях я хотел бы иметь возможность перемещать повернутые журналы в другой каталог (или подкаталог) с именем по дате, сохраняя последнюю неделю журналов.

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

Logs to rotate: /var/log/example/*

Desired target directories (keeping a week):
    /var/log/example/20121006/*
    [ ... ]
    /var/log/example/20121012/*
Дейв Форгак
источник

Ответы:

9

Вы должны иметь возможность вызывать внешний скрипт в postrotateдирективе:

postrotate
  /path/to/your.sh
endscript

и пусть этот скрипт выполняет перемещение, например:

#!/bin/bash

newdir=/var/log/example/`date +%Y%m%d`

mkdir $newdir
mv /var/log/example.1.gz $newdir

find /var/log/example -mindepth 1 -maxdepth 1 -mtime +7 \
  -type d -print0 | xargs -0 rm -rf

Однако может быть проще просто использовать dateextдирективу. При этом к повернутым файлам будет добавлена ​​временная метка (хотя и не будет перемещена в другой каталог).

Смотрите logrotate(8)подробности об обеих директивах.

Ансгар Вичерс
источник
Кажется, что postrotateдобьется цели. Единственное, что мне нужно добавить, - это очистить старые каталоги, которые превышают определенное количество или старше определенной даты.
Дэйв Форгак
1
Смотрите обновленный ответ. Команда find | xargsдолжна удалить все непосредственные подкаталоги, /var/log/exampleесли они были последний раз изменены более 7 дней назад.
Ансгар Вичерс
1

У вас есть olddirдиректива, которую вы можете использовать в конфигурационном файле.

Из документации:

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

Ссылка : https://manpages.debian.org/jessie/logrotate/logrotate.8.en.html

Евгений Богданович
источник