Приручаем логи
1. Способ через logrotate (рекомендуется)
logrotate — стандартный инструмент для ротации и удаления логов. Он безопаснее прямого удаления, так как учитывает работающие службы и сжимает старые логи.
1.1 Создаем конфиг для /var/log/
Создайте файл /etc/logrotate.d/varlog-clean с таким содержимым:
/var/log/*.log /var/log/*/*.log {
daily # проверяем логи ежедневно
rotate 3 # храним 3 копии (т.е. логи за 3 дня)
missingok # не ругаться, если файлов нет
notifempty # не ротировать пустые файлы
compress # сжимать старые логи (gzip)
delaycompress # сжимать не сразу, а со следующей ротацией
sharedscripts # скрипты выполняются один раз для всей группы
postrotate
# Перезагрузка syslog (если используется)
systemctl restart rsyslog.service >/dev/null 2>&1 || true
endscript
}
1.2 Проверяем работу logrotate
Запустите вручную (для теста):
logrotate -vf /etc/logrotate.d/varlog-clean
Флаг -v — verbose, -f — принудительный запуск.
1.3 Добавляем в cron (если logrotate не настроен на daily)
По умолчанию logrotate запускается ежедневно через cron (/etc/cron.daily/logrotate), но если это отключено, добавьте в crontab:
0 0 * * * /usr/sbin/logrotate -f /etc/logrotate.d/varlog-clean
(запуск каждый день в 00:00)
2. Способ через cron и rm (простое удаление)
Если нужно просто удалять файлы раз в 3 дня без архивации:
2.1 Создаем скрипт для очистки
Создайте файл /usr/local/bin/clean-varlog.sh:
#!/bin/bash
# Удаляем файлы старше 3 дней в /var/log/
find /var/log/ -type f -name "*.log" -mtime +2 -exec rm -f {} \;
# Очищаем системные журналы (если нужно)
journalctl --vacuum-time=3d
Даём права на выполнение:
chmod +x /usr/local/bin/clean-varlog.sh
2.2 Добавляем задание в cron
Откройте crontab:
crontab -e
Добавьте строку (запуск каждые 3 дня в 00:00):
0 0 */3 * * /usr/local/bin/clean-varlog.sh
3. Важные замечания
Не удаляйте /var/log/ полностью! Некоторые файлы (например, wtmp, btmp, lastlog) критичны для системы.
Проверьте, какие логи можно удалять:
ls -lh /var/log/
Для journald (бинарные логи) используйте:
journalctl --vacuum-time=3d # удалить записи старше 3 дней
Если используется syslog/rsyslog, убедитесь, что он не записывает логи в удаляемые файлы.
Вывод
-
Лучший вариант —
logrotate(гибко, безопасно, с архивацией). -
Простой вариант —
cron + find + rm(но риск потерять важные логи).
Чтобы удалить все файлы в /var/log/ (или в любом другом каталоге), которые занимают более 100 МБ, можно использовать команду find с фильтрацией по размеру. Вот несколько способов:
1. Простое удаление файлов >100 МБ в /var/log/
find /var/log/ -type f -size +100M -exec rm -fv {} \;
Разбор команды:
find /var/log/ — ищем в /var/log/(можно заменить на другой путь).-type f — только файлы (не директории).-size +100M — файлы больше 100 МБ.-exec rm -fv {} \; — удаляем каждый найденный файл (-f — без подтверждения,-v — вывод списка удалённых).
Пример вывода:
removed '/var/log/syslog.1'
removed '/var/log/kern.log.2.gz'
2. Просмотр списка файлов перед удалением (без rm)
Если нужно сначала проверить, какие файлы будут удалены:
find /var/log/ -type f -size +100M -ls
или
find /var/log/ -type f -size +100M -exec du -h {} \;
Выведет список файлов >100 МБ с их размерами.
3. Удаление с подтверждением (интерактивно)
Если хотите подтверждать удаление каждого файла:
find /var/log/ -type f -size +100M -exec rm -i {} \;
Система будет спрашивать:
rm: remove regular file '/var/log/syslog.1'? y
4. Удаление + логирование в файл
Чтобы сохранить список удалённых файлов:
find /var/log/ -type f -size +100M -exec rm -fv {} \; > /var/log/large_files_cleanup.log
5. Добавление в cron для автоматического удаления
Если нужно выполнять очистку регулярно (например, раз в неделю):
Создаём скрипт /usr/local/bin/clean_large_logs.sh:
#!/bin/bash
find /var/log/ -type f -size +100M -exec rm -fv {} \; >> /var/log/large_files_cleanup.log
Даём права:
chmod +x /usr/local/bin/clean_large_logs.sh
Добавляем в crontab -e (например, каждое воскресенье в 3:00):
0 3 * * 0 /usr/local/bin/clean_large_logs.sh
Важные предупреждения
Не удаляйте файлы вручную из /var/log/ без проверки — некоторые логи могут быть нужны для работы системы (auth.log, secure, journal/).
Проверьте, какие процессы пишут в большие файлы (может быть ошибка в настройках):
lsof +L1 | grep deleted # показать "висячие" большие файлы
Лучше настроить logrotate, чтобы логи автоматически ротировались и сжимались (см. предыдущий ответ).
Вывод
-
Для разового удаления →
find /var/log/ -type f -size +100M -exec rm -fv {} \; -
Для автоматизации → добавьте скрипт в cron.
-
Для безопасного управления логами → настройте
logrotate.