Как удалить старые файлы логов в Linux

Хотите удалить старые ненужные файлы логов в Linux одной командой? Хотите что бы старые файлы логов удалились автоматически? Я расскажу как это сделать.

Бывалые пользователи Linux сразу подумают, что в этой статье пойдет речь про logrotate, но это не так. Да ротация логов как раз и была придумана и даже демон для нее, что бы старые логи не накапливались, а проходили ротацию и тем самым не засоряли систему. Но не все так радужно и существует куча служб и прочих задач, которые скапливают логи и никак за их количеством не следят. Более того даже если настроить ротацию таким логам, то ничего не выйдет.

Например, демон SoftEther VPN. Он каждые сутки создает новый файл логов, а про старый забывает. Таким образом его папке слогами через год будет 365 файлов только самого демона, а еще 365 файлов логов каждого хаба, который был создан. В общем это много. Может места и не много они будут занимать, но это много для файловой системы, которой нужно вести журнал по каждому файлу, что бы он не потерялся. Да и Linux работает обычно не один год, а лет 10 и сами понимаете что будет с файлами, если их вовремя не почистить.

Для решения задачи удаления старых фалов логов можно воспользоваться утилитой find с вот такими опциями

find /var/log/* -type f -mtime +182 -exec rm {} \;

Где:

  • /var/log/* – место для поиска и все папки и подпапки
  • -type f – в поиск должны попасть только файлы, папки удалять не стоит, да же если они старые, хотя все опционально
  • -mtime +182 – искать файлы будем модифицированные старше 182 дней назад
  • -exec rm {} – ну а эта опция удалит все что подпадет под поиск, для теста можно ее удалить и посмотреть что будет удалено

Ок, нашли файлы и удалили. Второй раз это делать не хочется. Нужно автоматизировать. Делаем такой скрипт командой nano rm_old.sh:

#!/bin/sh

#Задаем переменные
Day=182
log_path="/var/log/"

#Найти и удалить файлы
find $log_path* -type f -mtime +$Day -exec rm {} \;

echo 'файлы журнала старше 30 дней удалены из $log_path'

В переменных указываем нужные значения.

Затем делаем файл исполняемым командой chmod +x rm_old.sh

Добавляем скрипт в cron для периодического запуска командой crontab -e и вписываем следующее

0 10 * * * /path_to_script/rm_old.sh >/dev/null 2>&1

Таким образом скрипт будет запускаться каждые сутки в 00:10

Мне очень сильно помог материал из этих статей:

Подписаться
Уведомить о
guest
0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии