Автоматизиране на резервни копия с Bash скрипт и cron задачи

Резервните копия са критичен аспект от администрирането на всяка ИТ инфраструктура, особено когато се работи с важни данни. В тази статия ще разгледаме как можете да автоматизирате процеса на синхронизация и архивиране на файлове между локален и отдалечен сървър с помощта на Bash скрипт и cron задача.
Какво ще направим:
- Автоматизирано архивиране на файлове с
rsync
– ще създадем Bash скрипт, който ще синхронизира файлове между локален и отдалечен сървър. - Изпращане на уведомления в Telegram – ще добавим функция за известяване, когато процесът на архивиране приключи успешно или се появи грешка.
- Автоматично изтриване на стари архиви – ще добавим функция за изтриване на файлове по-стари от 3 дни, за да спестим място.
- Настройване на cron задача за автоматизация – ще настроим скрипта да се изпълнява автоматично всеки ден в 03:00 ч.
Скрипт за синхронизация и резервно копие
Първо, нека създадем Bash скрипт, който ще се грижи за синхронизацията на файловете. Той ще използва rsync
за копиране на файловете от отдалечен сървър към локален, ще проверява дали директориите съществуват, ще изпраща уведомления и ще изтрива стари файлове.
#!/bin/bash
REMOTE_USER="root"
REMOTE_HOST="10.110.110.100"
REMOTE_DIR="/backups/dump"
LOCAL_DIR="/backup_storage/big_proxmox/dump"
SSH_KEY="/root/.ssh/id_rsa"
EXCLUDE_FILE="/root/exclude-list.txt"
# Telegram настройки
TELEGRAM_BOT_TOKEN="YOUR_BOT_TOKEN_HERE"
TELEGRAM_CHAT_ID="YOUR_CHAT_ID_HERE"
# Функция за изпращане на съобщение в Telegram
send_telegram_message() {
local message="$1"
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
-d chat_id="${TELEGRAM_CHAT_ID}" \
-d text="${message}" \
-d parse_mode="HTML" > /dev/null
}
# Лог функция
log_message() {
local message="$1"
local log_file="/var/log/backup.log"
echo "$(date '+%Y-%m-%d %H:%M:%S') - ${message}" >> "${log_file}"
}
# Проверка дали локалната директория съществува, ако не - създай я
if [ ! -d "$LOCAL_DIR" ]; then
mkdir -p "$LOCAL_DIR"
if [ $? -ne 0 ]; then
error_message="Грешка: Не може да се създаде директорията ${LOCAL_DIR}"
log_message "${error_message}"
send_telegram_message "${error_message}"
exit 1
fi
fi
# Проверка за достъп до отдалечения сървър
ssh -i "$SSH_KEY" -o ConnectTimeout=10 "$REMOTE_USER@$REMOTE_HOST" exit 2>/dev/null
if [ $? -ne 0 ]; then
error_message="Грешка: Не може да се осъществи връзка с отдалечения сървър ${REMOTE_HOST}"
log_message "${error_message}"
send_telegram_message "${error_message}"
exit 1
fi
# Изпълнение на rsync с логване
rsync_output=$(rsync -avz --progress -e "ssh -i $SSH_KEY" --exclude-from="$EXCLUDE_FILE" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/" "$LOCAL_DIR/" 2>&1)
rsync_status=$?
if [ $rsync_status -eq 0 ]; then
success_message="Rsync завърши успешно"
log_message "${success_message}"
# Uncomment the line below if you want notifications on success too
# send_telegram_message "${success_message}"
else
error_message="Rsync се провали с код на грешка ${rsync_status}. Детайли: ${rsync_output}"
log_message "${error_message}"
send_telegram_message "${error_message}"
exit 1
fi
# Изтриване на файлове по-стари от 3 дни
find_output=$(find "$LOCAL_DIR" -type f -mtime +3 -exec rm -f {} \; 2>&1)
find_status=$?
if [ $find_status -ne 0 ]; then
error_message="Не можаха да се изтрият старите файлове. Грешка: ${find_output}"
log_message "${error_message}"
send_telegram_message "${error_message}"
exit 1
fi
exit 0
Как да персонализирате скрипта:
- Параметри за отдалечения сървър:
- Заменете стойностите на променливите
REMOTE_USER
,REMOTE_HOST
,REMOTE_DIR
,LOCAL_DIR
иSSH_KEY
, за да съответстват на вашата инфраструктура и конфигурация.REMOTE_USER
: Потребителското име за достъп до отдалечения сървър (напримерroot
или друг потребител).REMOTE_HOST
: IP адрес или домейн на отдалечения сървър.REMOTE_DIR
: Пътят до директорията, от която искате да архивирате данни на отдалечения сървър.LOCAL_DIR
: Локална директория, където ще се съхраняват резервните копия.SSH_KEY
: Пътят до вашия SSH ключ, който се използва за удостоверяване.
- Заменете стойностите на променливите
- Telegram настройки:
- Заменете стойностите на
TELEGRAM_BOT_TOKEN
иTELEGRAM_CHAT_ID
с вашите реални стойности за Telegram бота и chat ID. Това ще ви позволи да получавате уведомления за статус на резервното копие.
- Заменете стойностите на
Добавяне на Cron задача
След като имате готовия скрипт, следващата стъпка е да го добавите към cron, за да го изпълнявате автоматично на редовни интервали. Това ще гарантира, че резервните копия се правят без нужда от ръчно вмешателство.
За да настроите cron задача, изпълнете следните стъпки:
- Отворете crontab редактора:
crontab -e
Добавете следния ред, за да стартирате скрипта всяка нощ в 04:00 ч.:
0 4 * * * /root/backup-sync.sh >> /var/log/backup-sync.log 2>&1
Това означава:
0 4 * * *
: Скриптът ще се изпълнява всеки ден в 04:00 ч./root/backup-sync.sh
: Пътят до вашия Bash скрипт.>> /var/log/backup-sync.log 2>&1
: Всички изходни съобщения ще се записват в лог файл (/var/log/backup-sync.log
).
Заключение
Автоматизирането на резервните копия с помощта на Bash скрипт и cron задача е удобен и ефективен начин за осигуряване на сигурността на данните. С този подход можете да минимизирате риска от загуба на важна информация, като същевременно спестите време и усилия при управлението на архивите.
Ако имате въпроси или искате да подобрите скрипта, не се колебайте да добавите нови функционалности и да го настроите според нуждите на вашата система.
Благодарим ви за прочитането на статията! Ако намерихте информацията за полезна, можете да дарите посредством бутоните по-долу:
Donate ☕️ Дарете с PayPalDonate 💳 Дарете с Revolut