#!/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"