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

Как я могу ротацию многих файлов журнала в другой подкаталог за ротацию?

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

Я могу использовать 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