Кто-то только что спросил меня «как долго мы должны хранить журналы для нашего приложения», и мой ответ был «пока диск не заполнится», поскольку нет причин выбрасывать их, кроме как из-за недостатка места.
Однако стандартный logrotate хочет, чтобы мы указали конкретный период + количество вращений. Есть ли что-то похожее, что позволило бы нам сказать «вращайся ежедневно и сохраняй столько истории, сколько захочешь, пока не останется только 5% свободного места»?
Платформа Redhat Linux.
Ответы:
Возможно, вы можете использовать директивы firstaction или lastaction для вызова сценария оболочки, который проверяет наличие свободного места на диске, а затем запускает удаление самых старых файлов.
Обновить:
Вот сообщение Stackoverflow о типе скрипта, который вы можете запустить:
/programming/7523059/remove-oldest-file-in-repository
источник
Сам logrotate не имеет такой опции. Вы можете добавить скрипт cron, который найдет самый старый журнал, который будет удален всякий раз, когда свободное место будет ниже ваших критериев. Вы также можете сделать некоторые другие проверки. Однако переполнение диска все время не является хорошей идеей, поскольку система не сможет создавать большие временные файлы и может вызвать сбои приложения.
источник
Я просто хотел отметить, что есть случаи, когда вы не хотите, чтобы ваши журналы занимали все доступное дисковое пространство. Я имел дело с несколькими хостами с тонкими каталогами / var, и поддержание журналов до определенного размера было крайне важно. Мы использовали работу друзей в сочетании с logrorate, чтобы уменьшить размер. Нечто подобное можно использовать в вашей среде, хотя лучше использовать центральный сервер журналов, например, spunk или syslog-ng.
источник
Как предложил @cjc, вы можете использовать firstaction. Смотрите этот пример:
В этом примере вы удалили файлы размером более 1 ГБ из раздела / mnt / user, если используемое пространство раздела превышает 50% .
источник