Переделано под TAR.GZ

This commit is contained in:
Евгений Александрович 2025-01-23 20:38:31 +03:00
parent d6d48b4980
commit 4fe9f8401a
2 changed files with 48 additions and 53 deletions

View File

@ -1,6 +1,6 @@
[Backup] [Backup]
ENABLE_DIRS=true ENABLE_DIRS=true
ENABLE_FILES=true ENABLE_FILES=false
DIRS=/etc,/var/log DIRS=/etc,/var/log
FILES=/home/user/BashProject/backup.sh,/home/user/jet/restore.sh FILES=/home/user/BashProject/backup.sh,/home/user/jet/restore.sh
[FTP] [FTP]

View File

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
CONFIG_DIR="/home/stirelshka8/BashProject/backup-server-ftp/backup.ini" CONFIG_DIR="backup.ini"
LOG_FILE="backup_log_$(date +"%Y-%m-%d_%H-%M-%S").txt" LOG_FILE="backup_log_$(date +"%Y-%m-%d_%H-%M-%S").txt"
# Инициализация логирования # Инициализация логирования
@ -13,45 +13,45 @@ if [ "$EUID" -ne 0 ]; then
fi fi
# Проверка наличия необходимых утилит # Проверка наличия необходимых утилит
for cmd in zip ftp; do for cmd in tar ftp lftp; do
if ! command -v "$cmd" &> /dev/null; then if ! command -v "$cmd" &> /dev/null; then
echo "Ошибка: Утилита '$cmd' не найдена. Установите её и повторите попытку." echo "Ошибка: Утилита '$cmd' не найдена. Установите её и повторите попытку."
exit 1 exit 1
fi fi
done done
get_ini_value() { get_ini_value() {
local ini_file="$CONFIG_DIR" local ini_file="$CONFIG_DIR"
local section="$1" local section="$1"
local key="$2" local key="$2"
# Найти секцию # Найти секцию
local section_found=0 local section_found=0
while IFS= read -r line; do while IFS= read -r line; do
# Проверка на начало секции # Проверка на начало секции
if [[ "$line" == "[$section]" ]]; then if [[ "$line" == "[$section]" ]]; then
section_found=1 section_found=1
continue continue
fi fi
# Если секция найдена, ищем ключ # Если секция найдена, ищем ключ
if [[ $section_found -eq 1 ]]; then if [[ $section_found -eq 1 ]]; then
# Проверка на конец секции # Проверка на конец секции
if [[ "$line" =~ ^[.*]$ ]]; then if [[ "$line" =~ ^[.*]$ ]]; then
break break
fi fi
# Проверка на наличие ключа # Проверка на наличие ключа
if [[ "$line" == "$key="* ]]; then if [[ "$line" == "$key="* ]]; then
echo "${line#*=}" echo "${line#*=}"
return return
fi fi
fi fi
done < "$ini_file" done < "$ini_file"
echo "Ошибка: значение для ключа '$key' в разделе '$section' не найдено." echo "Ошибка: значение для ключа '$key' в разделе '$section' не найдено."
exit 1 exit 1
} }
# Указываем директории и файлы для копирования # Указываем директории и файлы для копирования
DIRECTORIES=$(get_ini_value "Backup" "DIRS") DIRECTORIES=$(get_ini_value "Backup" "DIRS")
@ -60,12 +60,11 @@ ENABLE_DIRS=$(get_ini_value "Backup" "ENABLE_DIRS")
ENABLE_FILES=$(get_ini_value "Backup" "ENABLE_FILES") ENABLE_FILES=$(get_ini_value "Backup" "ENABLE_FILES")
TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S") TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S")
TEMP_DIR="/tmp/backup_$TIMESTAMP" TEMP_DIR="/tmp/backup_$TIMESTAMP"
ZIP_NAME="BACKUP_$(hostname)_$TIMESTAMP.zip" TAR_NAME="BACKUP_$(hostname)_$TIMESTAMP.tar.gz"
FTP_SERVER="$(get_ini_value "FTP" "FTP_SERVER")" FTP_SERVER="$(get_ini_value "FTP" "FTP_SERVER")"
FTP_USER="$(get_ini_value "FTP" "FTP_USER")" FTP_USER="$(get_ini_value "FTP" "FTP_USER")"
FTP_PASS="$(get_ini_value "FTP" "FTP_PASS")" FTP_PASS="$(get_ini_value "FTP" "FTP_PASS")"
# Создаем временную директорию # Создаем временную директорию
mkdir -p "$TEMP_DIR" mkdir -p "$TEMP_DIR"
echo "Создана временная директория: $TEMP_DIR" echo "Создана временная директория: $TEMP_DIR"
@ -100,22 +99,12 @@ else
echo "Резервное копирование файлов отключено." echo "Резервное копирование файлов отключено."
fi fi
# Упаковываем временную директорию в ZIP-архив # Упаковываем временную директорию в tar.gz архив
zip -r "$ZIP_NAME" "$TEMP_DIR" && echo "Создан ZIP-архив: $(pwd)/$ZIP_NAME" || { echo "Ошибка при создании ZIP-архива."; exit 1; } tar -czf "$TAR_NAME" -C "$TEMP_DIR" . && echo "Создан tar.gz архив: $(pwd)/$TAR_NAME" || { echo "Ошибка при создании tar.gz архива."; exit 1; }
# Проверяем наличие файлов # Проверяем наличие файлов
if [[ ! -f "$ZIP_NAME" ]]; then if [[ ! -f "$TAR_NAME" ]]; then
echo "Файл $ZIP_NAME не найден." echo "Файл $TAR_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 exit 1
fi fi
@ -124,21 +113,27 @@ if [[ ! -f "$LOG_FILE" ]]; then
exit 1 exit 1
fi fi
# Загружаем файлы на FTP-сервер
lftp -u "$FTP_USER","$FTP_PASS" "$FTP_SERVER" <<EOF > ftp_log.txt 2>&1 lftp -u "$FTP_USER","$FTP_PASS" "$FTP_SERVER" <<EOF > ftp_log.txt 2>&1
set ssl:verify-certificate no set ssl:verify-certificate no
put "$(pwd)/$ZIP_NAME" put "$(pwd)/$TAR_NAME"
put "$(pwd)/$LOG_FILE" put "$(pwd)/$LOG_FILE"
bye bye
EOF EOF
# Проверка статуса выполнения # Проверка статуса выполнения FTP команды
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
echo "$FTP_USER $FTP_PASS $FTP_SERVER" echo "Ошибка при выполнении FTP команды."
echo "Ошибка при выполнении FTP команды"
exit 1 exit 1
fi fi
# Удаляем временную директорию и ZIP-архив # Удаление временной директории и архива после завершения работы скрипта
rm -rf "$TEMP_DIR" rm -rf "$TEMP_DIR"
rm "$ZIP_NAME" rm "$TAR_NAME"
rm "$LOG_FILE" rm "$LOG_FILE"
echo "Временная директория $TEMP_DIR удалена."
echo "Архив $TAR_NAME удален."
echo "Лог-файл $LOG_FILE удален."
echo "Резервное копирование завершено успешно."