🧹 Как автоматически очищать старые логи и временные файлы в Linux: готовый скрипт и инструкция

Со временем даже самый чисто настроенный сервер Linux обрастает мусором: системные логи, временные файлы, кэш после обновлений, старые журналы systemd. Всё это может занимать десятки гигабайт дискового пространства. Регулярная очистка — важный шаг в поддержании стабильности и свободного места на сервере.

📋 В этой статье:

  • ✅ Зачем нужна автоматическая очистка
  • 🧼 Подробный разбор скрипта для удаления старых логов
  • 🛠️ Команды для чистки мусора
  • ⏰ Как настроить автоматический запуск по расписанию (cron)
  • 📦 Готовый универсальный скрипт для ежедневной или еженедельной очистки

🔍 Зачем автоматизировать очистку логов?

Службы вроде nginx, apache, systemd, fail2banи другие регулярно пишут логи в /var/log. Эти файлы:

  • Со временем накапливаются
  • Занимают много места
  • Редко нужны в архиве старше 1-2 недель

Очистка старых логов и мусора:

  • 🔓 Освобождает место на диске
  • 📉 Снижает нагрузку на системы мониторинга и бэкапа
  • 🔧 Упрощает администрирование

🧼 Скрипт для автоматической очистки старых логов

Вот простой, но эффективный bash-скрипт, который удаляет .log и архивированные логи (.gz, .xz) старше определённого количества дней, и ведёт лог своей работы:

📜 Исходный код:

#!/bin/bash

LOG_DIR="/var/log"
AGE_DAYS=14
LOG_FILE="/var/log/log_cleanup.log"

echo "🧼 Очистка логов старше $AGE_DAYS дней в $LOG_DIR... $(date)" | tee -a "$LOG_FILE"

find "$LOG_DIR" -type f -name "*.log" -mtime +$AGE_DAYS -exec rm -v {} \; | tee -a "$LOG_FILE"
find "$LOG_DIR" -type f \( -name "*.gz" -o -name "*.xz" \) -mtime +$AGE_DAYS -exec rm -v {} \; | tee -a "$LOG_FILE"

echo "✅ Очистка завершена." | tee -a "$LOG_FILE"

🔍 Разбор скрипта по частям

  • LOG_DIR=”/var/log” — Каталог, где находятся системные журналы.
  • AGE_DAYS=14 — Сколько дней считать “устаревшими”.
  • find … -mtime +N — Ищет и удаляет старые файлы.

🛠️ Другие команды для очистки сервера

1. Удаление systemd-журналов:

journalctl --vacuum-time=7d

2. Очистка временных директорий:

rm -rf /tmp/* /var/tmp/*

⚠️ Осторожно: Не выполняйте во время работы активных пользователей!

3. Очистка кэша apt:

apt clean && apt autoremove -y

⏰ Как запускать очистку автоматически?

1. Создайте файл /usr/local/bin/server-cleanup.sh:

#!/bin/bash

LOG_FILE="/var/log/server-cleanup.log"
echo "[$(date)] Очистка начата" >> "$LOG_FILE"

find /var/log -type f -name "*.log" -mtime +7 -delete >> "$LOG_FILE" 2>&1
find /var/log -type f \( -name "*.gz" -o -name "*.xz" \) -mtime +7 -delete >> "$LOG_FILE" 2>&1
journalctl --vacuum-time=7d >> "$LOG_FILE" 2>&1
rm -rf /tmp/* /var/tmp/* >> "$LOG_FILE" 2>&1
apt clean && apt autoremove -y >> "$LOG_FILE" 2>&1

echo "[$(date)] Очистка завершена" >> "$LOG_FILE"

2. Сделайте файл исполняемым:

chmod +x /usr/local/bin/server-cleanup.sh

3. Добавьте в crontab:

sudo crontab -e

Добавьте строку:

0 0 * * 0 /usr/local/bin/server-cleanup.sh

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

✅ Лучшие практики

  • Всегда логируйте действия скриптов
  • Не удаляйте файлы из /tmp при активных пользователях
  • Тестируйте find ... -delete перед применением
  • Храните пользовательские скрипты в /usr/local/bin

🔄 Совместимость и требования

Работает на любой системе Linux с установленными:

  • bash
  • find, rm
  • journalctl
  • apt (на Debian/Ubuntu)

📦 Заключение

Автоматическая очистка логов и временных файлов — важная часть поддержки Linux-серверов. Используйте приведённый скрипт и cron, чтобы избавиться от мусора, освободить место и снизить риск переполнения диска.

Сохрани эту статью, добавь скрипт на сервер и наслаждайся чистотой! 🧼