script erstellen

This commit is contained in:
2026-06-07 16:13:42 +00:00
commit aa817f5dff
+146
View File
@@ -0,0 +1,146 @@
#!/bin/bash
set -o pipefail
########################################
# Konfiguration
########################################
SFTP_HOST="sftp.example.com"
SFTP_PORT="22"
SFTP_USER="user"
SFTP_PASS="Tpassw0rd"
SFTP_REMOTE_DIR="/uploads"
MAIL_TO=""
MAIL_FROM=""
########################################
# Variablen
########################################
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
DIR_NAME="$(basename "$SCRIPT_DIR")"
DATE=$(date +"%Y-%m-%d_%H-%M-%S")
BACKUP_FILE="${DIR_NAME}_${DATE}.tar.gz"
LOGFILE="/tmp/${DIR_NAME}_backup.log"
########################################
# Logging
########################################
exec > >(tee -a "$LOGFILE")
exec 2>&1
echo "========================================="
echo "Backup gestartet: $(date)"
echo "Projekt: $DIR_NAME"
echo "========================================="
########################################
# Fehlerbehandlung
########################################
send_error_mail() {
SUBJECT="❌ Backup FEHLGESCHLAGEN - ${DIR_NAME}"
mail -s "$SUBJECT" "$MAIL_TO" < "$LOGFILE"
}
send_success_mail() {
SIZE=$(du -h "/tmp/${BACKUP_FILE}" | awk '{print $1}')
mail -s "✅ Backup erfolgreich - ${DIR_NAME} (${SIZE})" "$MAIL_TO" << EOF
Backup erfolgreich abgeschlossen.
Projekt:
${DIR_NAME}
Datum:
$(date)
Backup:
${BACKUP_FILE}
Größe:
${SIZE}
Log:
$(cat "$LOGFILE")
EOF
}
trap 'send_error_mail; exit 1' ERR
########################################
# Docker stoppen
########################################
cd "$SCRIPT_DIR"
echo "Stoppe Docker..."
docker compose down
########################################
# Archiv erstellen
########################################
echo "Erstelle Backup..."
tar \
--same-owner \
--preserve-permissions \
-czpf "/tmp/${BACKUP_FILE}" \
-C "$(dirname "$SCRIPT_DIR")" \
"$DIR_NAME"
########################################
# Docker starten
########################################
echo "Starte Docker..."
docker compose up -d
########################################
# Upload
########################################
echo "Upload nach ${SFTP_HOST}..."
sshpass -p "$SFTP_PASS" sftp \
-oPort="$SFTP_PORT" \
-oStrictHostKeyChecking=no \
"${SFTP_USER}@${SFTP_HOST}" << EOF
cd ${SFTP_REMOTE_DIR}
put /tmp/${BACKUP_FILE}
bye
EOF
echo "Upload erfolgreich."
########################################
# Erfolgsmail
########################################
send_success_mail
########################################
# Aufräumen
########################################
rm -f "/tmp/${BACKUP_FILE}"
echo "Backup beendet: $(date)"
exec 1>&-
exec 2>&-
exit 0