Если логи занимают значительный объём, неплохо было бы собирать их в архив и перемещать в отдельный каталог. Сегодня как раз об этом, напишем скрипт, который это автоматизирует.
Допустим, есть у нас исходная директория с логами: /bashtex/logs и в ней хранятся логи вида: BashTex_DAY_20241105_1758.log
20241105 — это дата в формате YYYYMMDD, представляющая собой 5 ноября 2024 года.
Архив с логами за день нужно перекинуть в /bashtex/logs/backup/ с названием подкаталога в формате DDMMYYYY.
Bash-скрипт решающий данную задачу:
#!/bin/bash
# Исходный каталог с логами
LOG_DIR="/bashtex/logs"
# Каталог для хранения бэкапов
BACKUP_DIR="$LOG_DIR/backup"
# Определение текущей даты в нужных форматах
CURRENT_DATE=$(date +"%Y%m%d") # Формат для поиска логов YYYYMMDD
CURRENT_DATE_FORMATTED=$(date +"%d%m%Y") # Формат для папки бэкапа DDMMYYYY
# Создание имени архива с логами
ARCHIVE_NAME="logs_$CURRENT_DATE_FORMATTED.tar.gz"
# Каталог для сегодняшнего бэкапа
TARGET_DIR="$BACKUP_DIR/$CURRENT_DATE_FORMATTED"
# Проверка и создание целевого каталога, если его нет
if [ ! -d "$TARGET_DIR" ]; then
echo "Создаю директорию для бэкапа: $TARGET_DIR"
mkdir -p "$TARGET_DIR"
fi
# Поиск и архивирование логов за текущий день
echo "Собираю логи за $CURRENT_DATE и архивирую в $ARCHIVE_NAME"
find "$LOG_DIR" -type f -name "*_$CURRENT_DATE_*.log" -print0 | tar -czvf "$TARGET_DIR/$ARCHIVE_NAME" --null -T -
echo "Архив создан и перемещён в $TARGET_DIR/$ARCHIVE_NAME"
Небольшое пояснение:
LOG_DIR — каталог с логами.
BACKUP_DIR — основной каталог для хранения архивов.
CURRENT_DATE — текущая дата в формате YYYYMMDD, для поиска логов.
CURRENT_DATE_FORMATTED — текущая дата в формате DDMMYYYY, для названия папки.
Выдаем права на исполнение:
chmod +x backup_logs.sh
И запускаем:
./backup_logs.sh
Теперь логи за текущий день будут собираться, архивироваться и переноситься в папку /bashtex/logs/backup/DDMMYYYY. Можно это дело докрутить под нужную маску логов и архивировать только то, что необходимо, а не все логи за день. Также это дело можно добавить в крон и архивировать раз в сутки
BashTex 📱 #linux #bash