Со временем даже самый чисто настроенный сервер 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, чтобы избавиться от мусора, освободить место и снизить риск переполнения диска.
Сохрани эту статью, добавь скрипт на сервер и наслаждайся чистотой! 🧼