backup-server-ftp/backup.sh

140 lines
5.0 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
CONFIG_DIR="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 tar ftp lftp; 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"
TAR_NAME="BACKUP_$(hostname)_$TIMESTAMP.tar.gz"
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
# Упаковываем временную директорию в tar.gz архив
tar -czf "$TAR_NAME" -C "$TEMP_DIR" . && echo "Создан tar.gz архив: $(pwd)/$TAR_NAME" || { echo "Ошибка при создании tar.gz архива."; exit 1; }
# Проверяем наличие файлов
if [[ ! -f "$TAR_NAME" ]]; then
echo "Файл $TAR_NAME не найден."
exit 1
fi
if [[ ! -f "$LOG_FILE" ]]; then
echo "Файл $LOG_FILE не найден."
exit 1
fi
# Загружаем файлы на FTP-сервер
lftp -u "$FTP_USER","$FTP_PASS" "$FTP_SERVER" <<EOF > ftp_log.txt 2>&1
set ssl:verify-certificate no
put "$(pwd)/$TAR_NAME"
put "$(pwd)/$LOG_FILE"
bye
EOF
# Проверка статуса выполнения FTP команды
if [ $? -ne 0 ]; then
echo "Ошибка при выполнении FTP команды."
exit 1
fi
# Удаление временной директории и архива после завершения работы скрипта
rm -rf "$TEMP_DIR"
rm "$TAR_NAME"
rm "$LOG_FILE"
echo "Временная директория $TEMP_DIR удалена."
echo "Архив $TAR_NAME удален."
echo "Лог-файл $LOG_FILE удален."
echo "Резервное копирование завершено успешно."