From d6d48b4980eb08464fa8510effab1ea7d56ad316 Mon Sep 17 00:00:00 2001 From: stirelshka8 Date: Thu, 23 Jan 2025 20:27:41 +0300 Subject: [PATCH] INIT --- backup.ini | 10 ++++ backup.sh | 144 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 154 insertions(+) create mode 100644 backup.ini create mode 100755 backup.sh diff --git a/backup.ini b/backup.ini new file mode 100644 index 0000000..11adea7 --- /dev/null +++ b/backup.ini @@ -0,0 +1,10 @@ +[Backup] +ENABLE_DIRS=true +ENABLE_FILES=true +DIRS=/etc,/var/log +FILES=/home/user/BashProject/backup.sh,/home/user/jet/restore.sh +[FTP] +FTP_SERVER=127.0.0.1 +FTP_USER=user +FTP_PASS=password +[OTHER] \ No newline at end of file diff --git a/backup.sh b/backup.sh new file mode 100755 index 0000000..63a3f39 --- /dev/null +++ b/backup.sh @@ -0,0 +1,144 @@ +#!/bin/bash + +CONFIG_DIR="/home/stirelshka8/BashProject/backup-server-ftp/backup.ini" +LOG_FILE="backup_log_$(date +"%Y-%m-%d_%H-%M-%S").txt" + +# Инициализация логирования +exec &> >(tee -a "$LOG_FILE") + +# Проверка на выполнение скрипта с правами суперпользователя +if [ "$EUID" -ne 0 ]; then + echo "Ошибка: скрипт должен быть запущен с правами суперпользователя (sudo)." + exit 1 +fi + +# Проверка наличия необходимых утилит +for cmd in zip ftp; do + if ! command -v "$cmd" &> /dev/null; then + echo "Ошибка: Утилита '$cmd' не найдена. Установите её и повторите попытку." + exit 1 + fi +done + + get_ini_value() { + local ini_file="$CONFIG_DIR" + local section="$1" + local key="$2" + + # Найти секцию + local section_found=0 + while IFS= read -r line; do + # Проверка на начало секции + if [[ "$line" == "[$section]" ]]; then + section_found=1 + continue + fi + + # Если секция найдена, ищем ключ + if [[ $section_found -eq 1 ]]; then + # Проверка на конец секции + if [[ "$line" =~ ^[.*]$ ]]; then + break + fi + + # Проверка на наличие ключа + if [[ "$line" == "$key="* ]]; then + echo "${line#*=}" + return + fi + fi + done < "$ini_file" + + echo "Ошибка: значение для ключа '$key' в разделе '$section' не найдено." + exit 1 + } + +# Указываем директории и файлы для копирования +DIRECTORIES=$(get_ini_value "Backup" "DIRS") +FILES=$(get_ini_value "Backup" "FILES") +ENABLE_DIRS=$(get_ini_value "Backup" "ENABLE_DIRS") +ENABLE_FILES=$(get_ini_value "Backup" "ENABLE_FILES") +TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S") +TEMP_DIR="/tmp/backup_$TIMESTAMP" +ZIP_NAME="BACKUP_$(hostname)_$TIMESTAMP.zip" +FTP_SERVER="$(get_ini_value "FTP" "FTP_SERVER")" +FTP_USER="$(get_ini_value "FTP" "FTP_USER")" +FTP_PASS="$(get_ini_value "FTP" "FTP_PASS")" + + +# Создаем временную директорию +mkdir -p "$TEMP_DIR" +echo "Создана временная директория: $TEMP_DIR" + +# Проверка, включено ли резервное копирование директорий +echo "Проверка ENABLE_DIRS: $ENABLE_DIRS" +if [[ "$ENABLE_DIRS" == "true" ]]; then + IFS=',' read -r -a DIR_ARRAY <<< "$DIRECTORIES" + for DIR in "${DIR_ARRAY[@]}"; do + if [ -d "$DIR" ]; then + cp -r "$DIR" "$TEMP_DIR/" && echo "Копирование директории $DIR завершено." || echo "Ошибка при копировании директории $DIR." + else + echo "Директория $DIR не найдена, пропускаем." + fi + done +else + echo "Резервное копирование директорий отключено." +fi + +# Проверка, включено ли резервное копирование файлов +echo "Проверка ENABLE_FILES: $ENABLE_FILES" +if [[ "$ENABLE_FILES" == "true" ]]; then + IFS=',' read -r -a FILE_ARRAY <<< "$FILES" + for FILE in "${FILE_ARRAY[@]}"; do + if [ -f "$FILE" ]; then + cp "$FILE" "$TEMP_DIR/" && echo "Копирование файла $FILE завершено." || echo "Ошибка при копировании файла $FILE." + else + echo "Файл $FILE не найден, пропускаем." + fi + done +else + echo "Резервное копирование файлов отключено." +fi + +# Упаковываем временную директорию в ZIP-архив +zip -r "$ZIP_NAME" "$TEMP_DIR" && echo "Создан ZIP-архив: $(pwd)/$ZIP_NAME" || { echo "Ошибка при создании ZIP-архива."; exit 1; } + +# Проверяем наличие файлов +if [[ ! -f "$ZIP_NAME" ]]; then + echo "Файл $ZIP_NAME не найден." + exit 1 +fi + +if [[ ! -f "$LOG_FILE" ]]; then + echo "Файл $LOG_FILE не найден." + exit 1 +fi +# Проверяем наличие файлов +if [[ ! -f "$ZIP_NAME" ]]; then + echo "Файл $ZIP_NAME не найден." + exit 1 +fi + +if [[ ! -f "$LOG_FILE" ]]; then + echo "Файл $LOG_FILE не найден." + exit 1 +fi + +lftp -u "$FTP_USER","$FTP_PASS" "$FTP_SERVER" < ftp_log.txt 2>&1 +set ssl:verify-certificate no +put "$(pwd)/$ZIP_NAME" +put "$(pwd)/$LOG_FILE" +bye +EOF + +# Проверка статуса выполнения +if [ $? -ne 0 ]; then + echo "$FTP_USER $FTP_PASS $FTP_SERVER" + echo "Ошибка при выполнении FTP команды" + exit 1 +fi + +# Удаляем временную директорию и ZIP-архив +rm -rf "$TEMP_DIR" +rm "$ZIP_NAME" +rm "$LOG_FILE"