У меня есть каталог с множеством файлов журналов, каждый из которых я хотел бы обновлять ежедневно. В организационных целях я хотел бы иметь возможность перемещать ротационные журналы в другой каталог (или подкаталог) с указанием даты, сохраняя журналы последней недели.
Я могу использовать logrotate для достижения большей части этого, перемещая файлы на месте или даже перемещая их в один другой каталог с помощью olddir
директиву, но мне трудно найти решение для создания отдельных подкаталогов за каждый оборот. Как я могу этого добиться ?:
Logs to rotate: /var/log/example/*
Desired target directories (keeping a week):
/var/log/example/20121006/*
[ ... ]
/var/log/example/20121012/*
У вас должна быть возможность вызвать внешний скрипт в 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)
для получения подробной информации об обеих директивах.
У тебя есть olddir
директиву, которую вы можете использовать в файле конфигурации.
Из документации:
olddir
Журналы перемещаются в каталог для ротации. Каталог должен находиться на том же физическом устройстве, что и ротационный файл журнала, и предполагается, что он находится относительно каталога, содержащего файл журнала, если не указано абсолютное имя пути. При использовании этой опции все старые версии журнала попадают в каталог. Эта опция может быть отмененаnoolddir
вариант.
Ссылка: https://manpages.debian.org/jessie/logrotate/logrotate.8.en.html