From f88576b917d391479626dbc1581071dbd55ac998 Mon Sep 17 00:00:00 2001 From: stirelshka8 Date: Sat, 25 Jan 2025 12:40:18 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ backup.ini | 2 ++ backup.sh | 18 ++++++++++++++ 3 files changed, 90 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..4ee848f --- /dev/null +++ b/README.md @@ -0,0 +1,70 @@ +▎Описание скрипта резервного копирования + +Этот скрипт предназначен для автоматизации процесса резервного копирования файлов и директорий на удаленный FTP-сервер. Он поддерживает отправку уведомлений о статусе резервного копирования через Telegram и Gotify. + +▎Функциональные возможности + +• Чтение конфигурации: Скрипт загружает параметры из файла backup.ini, который содержит настройки для резервного копирования и отправки уведомлений. + +• Проверка наличия необходимых утилит: Перед выполнением резервного копирования скрипт проверяет наличие необходимых утилит (tar, ftp, lftp, curl). + +• Создание временной директории: Скрипт создает временную директорию для хранения резервных файлов. + +• Исключения: Поддержка исключений для файлов и директорий, которые не должны быть включены в резервную копию. + +• Отправка уведомлений: Возможность отправки уведомлений о статусе резервного копирования через Telegram и Gotify. + +▎Установка + +1. Убедитесь, что у вас установлены необходимые утилиты: + + ``` bash + sudo apt-get install tar curl lftp + ``` + +2. Создайте файл конфигурации backup.ini с необходимыми параметрами. + +▎Пример файла backup.ini + +``` ini +[SENT] +TELEGRAM_TOKEN=ваш_телеграм_токен +CHAT_ID=ваш_chat_id +GOTIFY_URL=http://ваш_адрес_gotify +GOTIFY_APP_TOKEN=ваш_gotify_app_token + +[Backup] +DIRS=/path/to/dir1,/path/to/dir2 +FILES=/path/to/file1,/path/to/file2 +SKIP_FILES=/path/to/skip_file1,/path/to/skip_file2 +SKIP_DIRS=/path/to/skip_dir1,/path/to/skip_dir2 +ENABLE_DIRS=true +ENABLE_FILES=true + +[FTP] +FTP_SERVER=ftp://ваш_ftp_сервер +FTP_USER=ваш_пользователь +FTP_PASS=ваш_пароль +[END] +``` + +▎Запуск скрипта + +Запустите скрипт с правами суперпользователя: +``` bash +sudo ./backup_script.sh +``` + +▎Логирование + +Скрипт ведет логирование всех операций в файл, имя которого формируется на основе текущей даты и времени. Логи будут содержать информацию о выполнении операций, а также сообщения об ошибках. + +▎Примечания + +• Убедитесь, что у вас есть права доступа на чтение файлов и директорий, которые вы хотите сохранить. + +• Не храните чувствительные данные (например, пароли) в открытом виде в файле конфигурации. Рассмотрите возможность использования безопасных методов хранения конфиденциальной информации. + +▎Лицензия + +Этот проект лицензирован под MIT License. Пожалуйста, ознакомьтесь с файлом LICENSE для получения дополнительной информации. \ No newline at end of file diff --git a/backup.ini b/backup.ini index 5382de5..e2aabc4 100644 --- a/backup.ini +++ b/backup.ini @@ -1,6 +1,8 @@ [Backup] ENABLE_DIRS=true ENABLE_FILES=false +SKIP_FILES= +SKIP_DIRS= DIRS=/etc,/var/log FILES=/home/user/BashProject/backup.sh,/home/user/jet/restore.sh [FTP] diff --git a/backup.sh b/backup.sh index 34e7a52..03df46a 100755 --- a/backup.sh +++ b/backup.sh @@ -92,6 +92,8 @@ get_sent_message() { # Указываем директории и файлы для копирования DIRECTORIES=$(get_ini_value "Backup" "DIRS") FILES=$(get_ini_value "Backup" "FILES") +SKIP_FILES=$(get_ini_value "Backup" "SKIP_FILES") +SKIP_DIRS=$(get_ini_value "Backup" "SKIP_DIRS") ENABLE_DIRS=$(get_ini_value "Backup" "ENABLE_DIRS") ENABLE_FILES=$(get_ini_value "Backup" "ENABLE_FILES") TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S") @@ -105,11 +107,21 @@ FTP_PASS="$(get_ini_value "FTP" "FTP_PASS")" mkdir -p "$TEMP_DIR" echo "Create temp directory: $TEMP_DIR" +# Преобразуем списки исключений в массивы +IFS=',' read -r -a SKIP_FILE_ARRAY <<< "$SKIP_FILES" +IFS=',' read -r -a SKIP_DIR_ARRAY <<< "$SKIP_DIRS" + # Проверка, включено ли резервное копирование директорий echo "Enable backup of directories: $ENABLE_DIRS" if [[ "$ENABLE_DIRS" == "true" ]]; then IFS=',' read -r -a DIR_ARRAY <<< "$DIRECTORIES" for DIR in "${DIR_ARRAY[@]}"; do + # Проверка на исключение директорий + if [[ " ${SKIP_DIR_ARRAY[@]} " =~ " $DIR " ]]; then + echo "Directory $DIR is in the skip list, skipping." + continue + fi + if [ -d "$DIR" ]; then cp -r "$DIR" "$TEMP_DIR/" && echo "Copy directory $DIR completed." || echo "Error while copying directory $DIR." else @@ -125,6 +137,12 @@ echo "Enable backup of files: $ENABLE_FILES" if [[ "$ENABLE_FILES" == "true" ]]; then IFS=',' read -r -a FILE_ARRAY <<< "$FILES" for FILE in "${FILE_ARRAY[@]}"; do + # Проверка на исключение файлов + if [[ " ${SKIP_FILE_ARRAY[@]} " =~ " $FILE " ]]; then + echo "File $FILE is in the skip list, skipping." + continue + fi + if [ -f "$FILE" ]; then cp "$FILE" "$TEMP_DIR/" && echo "Copy file $FILE completed." || echo "Error while copying file $FILE." else