Когда у вас на сервере копятся старые логи, они занимают всё больше места. Этот простой Bash-скрипт поможет автоматически архивировать и удалять файлы старше 7 дней:
#!/usr/bin/env bash
# 📁 Директория с логами
LOG_DIR="/var/log/myapp"
# 📆 Архивируем файлы старше этого количества дней
DAYS=7
# 📦 Папка для хранения архивов
DEST_DIR="/backup/logs"
# Создаём папку для бэкапов, если её нет
mkdir -p "$DEST_DIR"
# Формируем имя архива по дате, например logs-2025-05-26.tar.gz
ARCHIVE="$DEST_DIR/logs-$(date +%F).tar.gz"
# 🚀 Архивируем все файлы старше $DAYS дней
find "$LOG_DIR" -type f -mtime +"$DAYS" -print0 \
| tar --null -czvf "$ARCHIVE" --files-from -
# 🧹 Удаляем оригинальные файлы, которые попали в архив
find "$LOG_DIR" -type f -mtime +"$DAYS" -delete
echo "✅ Логи старше $DAYS дней заархивированы в $ARCHIVE и удалены из $LOG_DIR"
Как использовать
1. Сохраните скрипт, например, как
/usr/local/bin/backup_logs.sh и сделайте его исполняемым:
chmod +x /usr/local/bin/backup_logs.sh
2. Настройте cron-задачу, чтобы запускать его ежедневно в полночь. Введите
crontab -e и добавьте строку:
0 0 * * * /usr/local/bin/backup_logs.sh >> /var/log/backup_logs_cron.log 2>&1
🔧 Пояснения
*
find … -mtime +7 находит файлы старше 7 дней.*
tar --null --files-from - позволяет корректно обрабатывать имена с пробелами.* Архивы сохраняются в
/backup/logs — измените путь под свои нужды.👉 @i_linux