BASH_SRV Telegram 87
Сегодня я хочу поделиться простым, но очень полезным Bash-скриптом для автоматического резервного копирования директорий с ротацией старых бэкапов. Такой скрипт пригодится, если необходимо сохранять копии важных данных и при этом не засорять диск старыми архивами.


🔄 Скрипт: Backup с ротацией


#!/usr/bin/env bash

# ================================
# Скрипт: backup_rotate.sh
# Автор: https://www.tgoop.com/bash_srv
# Описание: Создаёт архив указанной директории,
# хранит только последние N бэкапов, удаляя старые.
# ================================

# Настройки
SOURCE_DIR="/var/www/my_project" # Директория, которую резервируем
DEST_DIR="/backups/my_project" # Директория для хранения бэкапов
RETENTION_DAYS=7 # Сколько дней хранить бэкапы

# Текущее время для имени архива
DATE=$(date +"%Y-%m-%d_%H-%M-%S")
ARCHIVE_NAME="backup_${DATE}.tar.gz"

# Проверяем, что исходная директория существует
if [[ ! -d "$SOURCE_DIR" ]]; then
echo " Исходная директория $SOURCE_DIR не найдена!"
exit 1
fi

# Создаём директорию назначения, если её нет
mkdir -p "$DEST_DIR"

# Создаём архив
tar -czf "${DEST_DIR}/${ARCHIVE_NAME}" -C "$(dirname "$SOURCE_DIR")" "$(basename "$SOURCE_DIR")"
if [[ $? -eq 0 ]]; then
echo " Создан бэкап: ${DEST_DIR}/${ARCHIVE_NAME}"
else
echo " Ошибка при создании архива!"
exit 1
fi

# Удаляем старые бэкапы старше RETENTION_DAYS
find "$DEST_DIR" -type f -name "backup_*.tar.gz" -mtime +${RETENTION_DAYS} -print -delete
echo "🗑️ Удалены бэкапы старше ${RETENTION_DAYS} дней."

exit 0



📝 Пояснение к скрипту

1. Настройки переменных:

🔹 SOURCE_DIR — путь к директории, которую нужно сохранить (например, веб-проект, база данных и т.д.).
🔹 DEST_DIR — куда складываем архива (может быть локальная папка или смонтированный удалённый диск).
🔹 RETENTION_DAYS — сколько дней хранить бэкапы. Всё, что старше этого значения, будет удаляться автоматически.
2. Скрипт проверяет, существует ли исходная директория. Если нет — выводит ошибку и завершает работу.
3. Создаётся папка назначения (mkdir -p), чтобы избежать ошибок, если её ещё нет.
4. Делается tar.gz - архив директории, причём для удобства используется команда:


tar -czf ${DEST_DIR}/${ARCHIVE_NAME} -C $(dirname $SOURCE_DIR) $(basename $SOURCE_DIR)


- Это позволяет не копировать весь путь в архив, а только нужную папку.
5. Если архивирование прошло успешно (код возврата 0) — выводим сообщение об успехе.
6. Далее команда find ищет файлы-архивы старше RETENTION_DAYS дней и удаляет их. Параметр -mtime +N означает “более N дней назад”. Опция -print -delete сначала покажет, что удаляется, а потом удалит.
7. В конце скрипт выводит, сколько старых бэкапов удалено, и завершает работу.


📌 Как использовать

1. Скопируйте скрипт в файл, например:


sudo nano /usr/local/bin/backup_rotate.sh

2. Сделайте его исполняемым:


sudo chmod +x /usr/local/bin/backup_rotate.sh

3. Отредактируйте переменные в начале скрипта под свои нужды:


SOURCE_DIR="/path/to/your/data"
DEST_DIR="/path/to/backup/location"
RETENTION_DAYS=7

4. Запустите вручную, чтобы протестировать:


/usr/local/bin/backup_rotate.sh

5. Если всё работает как надо, добавьте задание в ``````bash
crontab``````bash
для автоматического запуска. Например, чтобы делать бэкап каждый день в 3:00:


sudo crontab -e


И добавить строку:


0 3 * * * /usr/local/bin/backup_rotate.sh >> /var/log/backup_rotate.log 2>&1


Здесь мы также перенаправляем вывод в лог-файл, чтобы отслеживать успешные и неуспешные запуски. 📜

👉@bash_srv
👍911



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

Сегодня я хочу поделиться простым, но очень полезным Bash-скриптом для автоматического резервного копирования директорий с ротацией старых бэкапов. Такой скрипт пригодится, если необходимо сохранять копии важных данных и при этом не засорять диск старыми архивами.


🔄 Скрипт: Backup с ротацией


#!/usr/bin/env bash

# ================================
# Скрипт: backup_rotate.sh
# Автор: https://www.tgoop.com/bash_srv
# Описание: Создаёт архив указанной директории,
# хранит только последние N бэкапов, удаляя старые.
# ================================

# Настройки
SOURCE_DIR="/var/www/my_project" # Директория, которую резервируем
DEST_DIR="/backups/my_project" # Директория для хранения бэкапов
RETENTION_DAYS=7 # Сколько дней хранить бэкапы

# Текущее время для имени архива
DATE=$(date +"%Y-%m-%d_%H-%M-%S")
ARCHIVE_NAME="backup_${DATE}.tar.gz"

# Проверяем, что исходная директория существует
if [[ ! -d "$SOURCE_DIR" ]]; then
echo " Исходная директория $SOURCE_DIR не найдена!"
exit 1
fi

# Создаём директорию назначения, если её нет
mkdir -p "$DEST_DIR"

# Создаём архив
tar -czf "${DEST_DIR}/${ARCHIVE_NAME}" -C "$(dirname "$SOURCE_DIR")" "$(basename "$SOURCE_DIR")"
if [[ $? -eq 0 ]]; then
echo " Создан бэкап: ${DEST_DIR}/${ARCHIVE_NAME}"
else
echo " Ошибка при создании архива!"
exit 1
fi

# Удаляем старые бэкапы старше RETENTION_DAYS
find "$DEST_DIR" -type f -name "backup_*.tar.gz" -mtime +${RETENTION_DAYS} -print -delete
echo "🗑️ Удалены бэкапы старше ${RETENTION_DAYS} дней."

exit 0



📝 Пояснение к скрипту

1. Настройки переменных:

🔹 SOURCE_DIR — путь к директории, которую нужно сохранить (например, веб-проект, база данных и т.д.).
🔹 DEST_DIR — куда складываем архива (может быть локальная папка или смонтированный удалённый диск).
🔹 RETENTION_DAYS — сколько дней хранить бэкапы. Всё, что старше этого значения, будет удаляться автоматически.
2. Скрипт проверяет, существует ли исходная директория. Если нет — выводит ошибку и завершает работу.
3. Создаётся папка назначения (mkdir -p), чтобы избежать ошибок, если её ещё нет.
4. Делается tar.gz - архив директории, причём для удобства используется команда:


tar -czf ${DEST_DIR}/${ARCHIVE_NAME} -C $(dirname $SOURCE_DIR) $(basename $SOURCE_DIR)


- Это позволяет не копировать весь путь в архив, а только нужную папку.
5. Если архивирование прошло успешно (код возврата 0) — выводим сообщение об успехе.
6. Далее команда find ищет файлы-архивы старше RETENTION_DAYS дней и удаляет их. Параметр -mtime +N означает “более N дней назад”. Опция -print -delete сначала покажет, что удаляется, а потом удалит.
7. В конце скрипт выводит, сколько старых бэкапов удалено, и завершает работу.


📌 Как использовать

1. Скопируйте скрипт в файл, например:


sudo nano /usr/local/bin/backup_rotate.sh

2. Сделайте его исполняемым:


sudo chmod +x /usr/local/bin/backup_rotate.sh

3. Отредактируйте переменные в начале скрипта под свои нужды:


SOURCE_DIR="/path/to/your/data"
DEST_DIR="/path/to/backup/location"
RETENTION_DAYS=7

4. Запустите вручную, чтобы протестировать:


/usr/local/bin/backup_rotate.sh

5. Если всё работает как надо, добавьте задание в ``````bash
crontab``````bash
для автоматического запуска. Например, чтобы делать бэкап каждый день в 3:00:


sudo crontab -e


И добавить строку:


0 3 * * * /usr/local/bin/backup_rotate.sh >> /var/log/backup_rotate.log 2>&1


Здесь мы также перенаправляем вывод в лог-файл, чтобы отслеживать успешные и неуспешные запуски. 📜

👉@bash_srv

BY Bash Советы


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

View MORE
Open in Telegram


Telegram News

Date: |

Joined by Telegram's representative in Brazil, Alan Campos, Perekopsky noted the platform was unable to cater to some of the TSE requests due to the company's operational setup. But Perekopsky added that these requests could be studied for future implementation. Clear "Doxxing content is forbidden on Telegram and our moderators routinely remove such content from around the world," said a spokesman for the messaging app, Remi Vaughn. Hashtags Judge Hui described Ng as inciting others to “commit a massacre” with three posts teaching people to make “toxic chlorine gas bombs,” target police stations, police quarters and the city’s metro stations. This offence was “rather serious,” the court said.
from us


Telegram Bash Советы
FROM American