Для создания резервных копий по SSH и отправляет уведомления в телеграм
Код
#!/bin/sh
# Список директорий для бэкапа
dirlist="dir1 dir2 dir3"
# Сервер назначения и директория на сервере
DEST_USER="user"
DEST_SERVER="server_ip"
DEST_DIR="/путь/до/папки"
# Telegram Bot API
TELEGRAM_BOT_TOKEN="telegram_token"
TELEGRAM_CHAT_ID="chat_id"
# Функция для отправки уведомлений в Telegram
send_telegram_message() {
local message=$1
curl -s -X POST -H 'Content-Type: application/json' \
-d "{\"chat_id\": \"${TELEGRAM_CHAT_ID}\", \"text\": \"${message}\", \"disable_notification\": false}" \
https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage > /dev/null
}
# Цикл по каждой директории из списка
for onedir in $dirlist
do
# Текущее время для именования файла
TIMESTAMP=$(date '+%F_%T')
# Бэкап директории с помощью tar и передача по SSH
tar zcf - "/путь/до/папки/${onedir}" | ssh ${DEST_USER}@${DEST_SERVER} "cat > ${DEST_DIR}/${onedir}_${TIMESTAMP}.tar.gz"
# Проверка, что файл был создан и имеет ненулевой размер
line=$(ssh ${DEST_USER}@${DEST_SERVER} "ls -la ${DEST_DIR}/${onedir}_${TIMESTAMP}.tar.gz")
# Если в результате пусто - такого файла нет
if [ -z "$line" ]; then
echo "Backup of ${onedir} failed"
send_telegram_message "Backup of ${onedir} failed"
else
# Берем размер файла и проверяем, что он не нулевой
size=$(echo "$line" | awk '{print $5}')
if [ "$size" -ne 0 ]; then
echo "Backup of ${onedir} successful"
send_telegram_message "Backup of ${onedir} successful"
else
echo "Backup of ${onedir} failed"
send_telegram_message "Backup of ${onedir} failed"
fi
fi
done
# Отправка уведомления о завершении скрипта
send_telegram_message "The script has finished working."