INIT
This commit is contained in:
commit
d6d48b4980
10
backup.ini
Normal file
10
backup.ini
Normal file
@ -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]
|
144
backup.sh
Executable file
144
backup.sh
Executable file
@ -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" <<EOF > 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"
|
Loading…
Reference in New Issue
Block a user