Advertisement
skybetik

Ubilling backup files sending message in telegram

Jan 13th, 2025
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.85 KB | Fixit | 0 0
  1. #!/bin/sh
  2.  
  3. # Налаштування
  4. BACKUP_DIR="/home/backup" # Переконайтеся, що цей шлях існує
  5. MYSQL_BACKUP_DIR="/home/backup/mysqldump" # Шлях для збереження резервної копії бази даних
  6. SYSTEM_DIRS="/etc /usr/local/etc /usr/local/www/apache24/data /var/log/stargazer.log /var/cron/tabs/root" # Вкажіть директорії для архівації
  7. FTP_UPLOAD="YES" # Увімкнути або вимкнути завантаження на FTP (YES/NO)
  8. FTP_HOST="0.0.0.0" # Хост FTP-сервера
  9. FTP_LOGIN="kotiki" # Логін для FTP
  10. FTP_PASSWORD="password" # Пароль для FTP
  11. FTP_REMOTE_PATH="/Ubilling/" # Віддалений шлях для збереження резервних копій
  12. FTP_REMOTE_MYSQL_PATH="/Ubilling/mysqldump/" # Віддалений шлях для резервних копій бази даних
  13. TELEGRAM_BOT_TOKEN="------" # Токен вашого Telegram-бота
  14. TELEGRAM_CHAT_IDS="ID1 ID2" # Вкажіть ID через пробіл
  15. SEND_TELEGRAM_MESSAGES="YES" # Увімкнути або вимкнути надсилання повідомлень у Telegram (YES/NO)
  16. BACKUP_FILES="YES" # Увімкнути або вимкнути резервне копіювання файлів (YES/NO)
  17. BACKUP_DATABASE="YES" # Увімкнути або вимкнути резервне копіювання бази даних (YES/NO)
  18. HOSTNAME=$(hostname) # Отримання назви хоста
  19.  
  20. # Налаштування для MySQL
  21. MYSQLDUMP="/usr/local/bin/mysqldump" # Шлях до mysqldump
  22. MYSQL_USER="root" # Логін MySQL
  23. MYSQL_PASSWORD="password" # Пароль MySQL
  24. MYSQL_HOST="localhost" # Хост MySQL
  25.  
  26. DATE=$(date +%d%m%Y)
  27. BACKUP_PATH="${BACKUP_DIR}/${DATE}"
  28.  
  29. # Функція для надсилання повідомлень у Telegram
  30. send_telegram_message() {
  31. if [ "$SEND_TELEGRAM_MESSAGES" = "YES" ]; then
  32. local message="$1"
  33. local chat_ids="${TELEGRAM_CHAT_IDS}"
  34.  
  35. for chat_id in $chat_ids; do
  36. php -r "
  37. \$token = '${TELEGRAM_BOT_TOKEN}';
  38. \$chat_id = '${chat_id}';
  39. \$message = '${message}';
  40. \$url = 'https://api.telegram.org/bot'.\$token.'/sendMessage';
  41. \$post_fields = [
  42. 'chat_id' => \$chat_id,
  43. 'text' => \$message
  44. ];
  45. \$ch = curl_init();
  46. curl_setopt(\$ch, CURLOPT_URL, \$url);
  47. curl_setopt(\$ch, CURLOPT_POST, true);
  48. curl_setopt(\$ch, CURLOPT_RETURNTRANSFER, true);
  49. curl_setopt(\$ch, CURLOPT_POSTFIELDS, http_build_query(\$post_fields));
  50. curl_exec(\$ch);
  51. curl_close(\$ch);
  52. "
  53. done
  54. fi
  55. }
  56.  
  57. # Перевіряємо та створюємо директорію для резервної копії
  58. if [ -d "$BACKUP_PATH" ]; then
  59. echo "Резервна копія за ${DATE} вже існує. Видаляємо стару копію."
  60. rm -rf "$BACKUP_PATH"
  61. fi
  62.  
  63. mkdir -p "$BACKUP_PATH"
  64. chmod 700 "$BACKUP_PATH"
  65. mkdir -p "$MYSQL_BACKUP_DIR"
  66. chmod 700 "$MYSQL_BACKUP_DIR"
  67.  
  68. # Створення резервної копії системи
  69. backup_files_status="NO"
  70. backup_database_status="NO"
  71.  
  72. if [ "$BACKUP_FILES" = "YES" ]; then
  73. tar cf - $SYSTEM_DIRS 2>/dev/null | gzip > "${BACKUP_PATH}/system.tar.gz"
  74. if [ $? -ne 0 ]; then
  75. echo "Помилка створення резервної копії системи"
  76. send_telegram_message "Помилка створення резервної копії системи на хості ${HOSTNAME}"
  77. exit 1
  78. else
  79. backup_files_status="YES"
  80. fi
  81. fi
  82.  
  83. # Створення резервної копії бази даних
  84. if [ "$BACKUP_DATABASE" = "YES" ]; then
  85. if [ "$BACKUP_FILES" = "NO" ]; then
  86. backup_location="$MYSQL_BACKUP_DIR/$DATE"
  87. else
  88. backup_location="$BACKUP_PATH"
  89. fi
  90.  
  91. # Перевірка та створення каталогу
  92. mkdir -p "$backup_location"
  93. chmod 700 "$backup_location"
  94.  
  95. $MYSQLDUMP --opt --skip-lock-tables --single-transaction -h "$MYSQL_HOST" -p"$MYSQL_PASSWORD" -u "$MYSQL_USER" --all-databases | gzip > "${backup_location}/mysql.sql.gz"
  96. if [ $? -ne 0 ]; then
  97. echo "Помилка створення резервної копії бази даних"
  98. send_telegram_message "Помилка створення резервної копії бази даних на хості ${HOSTNAME}"
  99. exit 1
  100. else
  101. backup_database_status="YES"
  102. fi
  103. fi
  104.  
  105. # Надсилання повідомлення залежно від статусу бекапів
  106. if [ "$backup_files_status" = "YES" ] && [ "$backup_database_status" = "YES" ]; then
  107. send_telegram_message "Резервна копія файлів та бази даних успішно створена на хості ${HOSTNAME}"
  108. elif [ "$backup_files_status" = "YES" ]; then
  109. send_telegram_message "Резервна копія файлів успішно створена на хості ${HOSTNAME}, резервне копіювання бази даних вимкнено"
  110. elif [ "$backup_database_status" = "YES" ]; then
  111. send_telegram_message "Резервна копія бази даних успішно створена на хості ${HOSTNAME}, резервне копіювання файлів вимкнено"
  112. else
  113. send_telegram_message "Резервне копіювання не виконано на хості ${HOSTNAME}"
  114. fi
  115.  
  116. # Завантаження на FTP
  117. case $FTP_UPLOAD in
  118. YES)
  119. # Функція для очищення зайвих слешів у шляху
  120. clean_ftp_path() {
  121. echo "$1" | sed 's|/+|/|g' | sed 's|^/||'
  122. }
  123.  
  124. FTP_REMOTE_PATH=$(clean_ftp_path "$FTP_REMOTE_PATH")
  125. FTP_REMOTE_MYSQL_PATH=$(clean_ftp_path "$FTP_REMOTE_MYSQL_PATH")
  126.  
  127. if [ "$backup_files_status" = "YES" ]; then
  128. /usr/local/bin/ncftpput -R -v -u "$FTP_LOGIN" -p "$FTP_PASSWORD" "$FTP_HOST" "$FTP_REMOTE_PATH" "$BACKUP_PATH"
  129. fi
  130.  
  131. if [ "$backup_database_status" = "YES" ]; then
  132. mkdir -p "$MYSQL_BACKUP_DIR/$DATE" # Гарантія створення каталогу перед завантаженням
  133. chmod 700 "$MYSQL_BACKUP_DIR/$DATE"
  134. /usr/local/bin/ncftpput -R -v -u "$FTP_LOGIN" -p "$FTP_PASSWORD" "$FTP_HOST" "$FTP_REMOTE_MYSQL_PATH" "$MYSQL_BACKUP_DIR/$DATE"
  135. fi
  136.  
  137. if [ $? -eq 0 ]; then
  138. echo "Завантаження на FTP завершено успішно"
  139. send_telegram_message "Резервна копія успішно створена та завантажена на FTP (${FTP_HOST}) для хоста ${HOSTNAME}"
  140. else
  141. echo "Помилка завантаження на FTP"
  142. send_telegram_message "Помилка завантаження резервної копії на FTP (${FTP_HOST}) для хоста ${HOSTNAME}"
  143. exit 1
  144. fi
  145. ;;
  146.  
  147. NO)
  148. echo "Завантаження на FTP вимкнено"
  149. send_telegram_message "Резервна копія створена, але завантаження на FTP не виконано (вимкнено) для хоста ${HOSTNAME}"
  150. ;;
  151. esac
  152.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement