Скрипт бекапов через Telegram API

Данный скрипт можно запускать через cron ежедневно, компресировать нужную папку и отправлять через своего Telegram бота к себе в чат для сохранения бекапов.

В итоге нам нужно указать:

VOLUME_DIR — папку, которую хотим отправлять в наш Telegram канал

MAX_FILE_SIZE — т.к у Telegram имеются лимиты на отправку одного файла, то не более 50 мегабайт.

BOT_TOKEN, CHAT_ID — токен вашего бота(если не создали, то нужно создать нового бота через BotFather), и ID чата — нужно узнать id чата где сидит ваш бот.

#!/bin/bash

# Set the path to the directory containing the Docker volumes
VOLUME_DIR="/root/volumes"

# Set the maximum file size in bytes (50MB)
MAX_FILE_SIZE=31457280

# Set your Telegram bot API token and chat ID
BOT_TOKEN=""
CHAT_ID=""

# Compress each volume directory into a separate .tar.gz file
for volume in $(ls $VOLUME_DIR); do
  tar -czvf $VOLUME_DIR/"$volume".tar.gz -C $VOLUME_DIR "$volume"
done

# Split each .tar.gz file into multiple files, each no larger than MAX_FILE_SIZE
for tarfile in $(ls $VOLUME_DIR/*.tar.gz); do
  split --bytes=$MAX_FILE_SIZE --numeric-suffixes=1 --suffix-length=3 "$tarfile" "$tarfile".
  rm "$tarfile"
done

# Send each split file to Telegram using curl and the Telegram Bot API
for file in $(ls $VOLUME_DIR/*.tar.gz.*); do
  curl -F chat_id="$CHAT_ID" -F document=@"$file" "https://api.telegram.org/bot$BOT_TOKEN/sendDocument"
done

# Remove all split files
rm $VOLUME_DIR/*.tar.gz.*

Чтобы запускать скрипт по крону:

сrontab -e

0 0 * * * /your-home-dir/backup.sh

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *