BASH_SRV Telegram 81
🚀 Полезный Bash-скрипт для архивации старых логов 🚀

Иногда логи на сервере растут быстрее, чем хочется, и начинают занимать всё свободное место. Предлагаю простой скрипт, который:

1. Находит файлы с расширением .log, изменённые более чем N дней назад.
2. Архивирует их в тарболл с датой.
3. Удаляет оригиналы после успешного архива.


#!/usr/bin/env bash
#
# Архивация старых логов >7 дней
# Сохраняет в /var/backups/logs/YYYY-MM-DD_logs.tar.gz

# Настройки
LOG_DIR="/var/log" # Каталог с логами
BACKUP_DIR="/var/backups/logs" # Куда складывать архивы
DAYS_OLD=7 # Возраст файлов в днях

# Создаём папку для бэкапов, если нет
mkdir -p "$BACKUP_DIR"

# Текущая дата
DATE=$(date '+%Y-%m-%d')

# Найти *.log старше N дней и упаковать в архив
find "$LOG_DIR" -type f -regextype posix-extended -regex ".*/[a-zA-Z0-9_-]+\.log$" \
-mtime +"$DAYS_OLD" -print0 | \
tar --null -czf "$BACKUP_DIR/${DATE}_logs.tar.gz" --files-from -

# Проверка успешности и удаление исходников
if [[ $? -eq 0 ]]; then
echo " Архив создан: $BACKUP_DIR/${DATE}_logs.tar.gz"
# Удаляем старые логи
find "$LOG_DIR" -type f -regextype posix-extended -regex ".*/[a-zA-Z0-9_-]+\.log$" \
-mtime +"$DAYS_OLD" -delete
echo "🗑️ Оригиналы удалены."
else
echo " Ошибка при создании архива!"
exit 1
fi


Как это работает

* find … -regextype posix-extended -regex ".*/[a-zA-Z0-9_-]+\.log$"
Использует регулярное выражение, чтобы найти все файлы с именами, состоящими из букв, цифр, подчёркиваний или дефисов, и оканчивающиеся на .log.
* Опция -mtime +7 выбирает файлы старше 7 дней.
* tar --null --files-from - позволяет безопасно работать с именами, содержащими пробелы.
* При успешном создании архива исходные файлы удаляются командой -delete в find.

Совет:
Добавьте этот скрипт в cron, чтобы он выполнялся автоматически, например, каждый день в 2:00:


0 2 * * * /usr/local/bin/archive_logs.sh >> /var/log/archive_logs_cron.log 2>&1


👍 Надеюсь, пригодится!

👉@bash_srv
👍8



tgoop.com/bash_srv/81
Create:
Last Update:

🚀 Полезный Bash-скрипт для архивации старых логов 🚀

Иногда логи на сервере растут быстрее, чем хочется, и начинают занимать всё свободное место. Предлагаю простой скрипт, который:

1. Находит файлы с расширением .log, изменённые более чем N дней назад.
2. Архивирует их в тарболл с датой.
3. Удаляет оригиналы после успешного архива.


#!/usr/bin/env bash
#
# Архивация старых логов >7 дней
# Сохраняет в /var/backups/logs/YYYY-MM-DD_logs.tar.gz

# Настройки
LOG_DIR="/var/log" # Каталог с логами
BACKUP_DIR="/var/backups/logs" # Куда складывать архивы
DAYS_OLD=7 # Возраст файлов в днях

# Создаём папку для бэкапов, если нет
mkdir -p "$BACKUP_DIR"

# Текущая дата
DATE=$(date '+%Y-%m-%d')

# Найти *.log старше N дней и упаковать в архив
find "$LOG_DIR" -type f -regextype posix-extended -regex ".*/[a-zA-Z0-9_-]+\.log$" \
-mtime +"$DAYS_OLD" -print0 | \
tar --null -czf "$BACKUP_DIR/${DATE}_logs.tar.gz" --files-from -

# Проверка успешности и удаление исходников
if [[ $? -eq 0 ]]; then
echo " Архив создан: $BACKUP_DIR/${DATE}_logs.tar.gz"
# Удаляем старые логи
find "$LOG_DIR" -type f -regextype posix-extended -regex ".*/[a-zA-Z0-9_-]+\.log$" \
-mtime +"$DAYS_OLD" -delete
echo "🗑️ Оригиналы удалены."
else
echo " Ошибка при создании архива!"
exit 1
fi


Как это работает

* find … -regextype posix-extended -regex ".*/[a-zA-Z0-9_-]+\.log$"
Использует регулярное выражение, чтобы найти все файлы с именами, состоящими из букв, цифр, подчёркиваний или дефисов, и оканчивающиеся на .log.
* Опция -mtime +7 выбирает файлы старше 7 дней.
* tar --null --files-from - позволяет безопасно работать с именами, содержащими пробелы.
* При успешном создании архива исходные файлы удаляются командой -delete в find.

Совет:
Добавьте этот скрипт в cron, чтобы он выполнялся автоматически, например, каждый день в 2:00:


0 2 * * * /usr/local/bin/archive_logs.sh >> /var/log/archive_logs_cron.log 2>&1


👍 Надеюсь, пригодится!

👉@bash_srv

BY Bash Советы




Share with your friend now:
tgoop.com/bash_srv/81

View MORE
Open in Telegram


Telegram News

Date: |

bank east asia october 20 kowloon A Telegram channel is used for various purposes, from sharing helpful content to implementing a business strategy. In addition, you can use your channel to build and improve your company image, boost your sales, make profits, enhance customer loyalty, and more. SUCK Channel Telegram How to Create a Private or Public Channel on Telegram? The imprisonment came as Telegram said it was "surprised" by claims that privacy commissioner Ada Chung Lai-ling is seeking to block the messaging app due to doxxing content targeting police and politicians.
from us


Telegram Bash Советы
FROM American