Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
IAR Backup für Anfänger
#2
Version zwei des Skriptes
Es schaut in eure Datenbank wie eure UUID ist,
liest dann alle Verzeichnisnamen aus und macht
ein IAR Backup jedes einzelnen Ordners
so hat man ein Backup und man kann teile einzeln weitergeben.
Diese Version ist für Linux mit Screen und MariaDB.

Beispiel: bash saveinventar.sh "Zain" "Hassan" "geheimesPasswort" "/opt/backup/inventar" "dbuser" "dbpass" "dbname"

Zwischen den Backups macht dieses Skript 60 Sekunden Pause, damit nicht alle auf einmal heruntergeladen werden.

'''bash aveinventar.sh
Code:
#!/bin/bash

function mariarest() {
    # Letzte Bearbeitung 12.11.2023
    # todo: Diese Funktion wird von vielen Funktionen aufgerufen und darf nicht verändert werden.

    # Überprüfen, ob MariaDB-Client installiert ist # TODO Testen OK
    if ! command -v mariadb &> /dev/null; then
        echo "Der MariaDB-Client ist nicht installiert. Bitte installieren Sie ihn zuerst."
        return 1
    fi

    # Überprüfen, ob alle erforderlichen Parameter vorhanden sind # TODO Testen OK
    if [ "$#" -ne 4 ]; then
        echo "Usage: mariarest <username> <password> <databasename> <mysqlcommand>"
        return 1
    fi

    # Übergeben der Argumente an Variablen
    local username="$1"
    local password="$2"
    local databasename="$3"
    local mariacommand="$4"

    # Überprüfen, ob die erforderlichen Variablen nicht leer sind
    if [ -z "$username" ]; then echo "Verwendung: mariarest <Benutzername> <Passwort> <Datenbankname> [Kommando]"; exit 1; fi
    if [ -z "$password" ]; then echo "Verwendung: mariarest <Benutzername> <Passwort> <Datenbankname> [Kommando]"; exit 1; fi
    if [ -z "$databasename" ]; then echo "Verwendung: mariarest <Benutzername> <Passwort> <Datenbankname> [Kommando]"; exit 1; fi
    if [ -z "$mariacommand" ]; then echo "Verwendung: mariarest <Benutzername> <Passwort> <Datenbankname> [Kommando]"; exit 1; fi

    # Überprüfen, ob die erforderlichen Variablen nicht leer sind # TODO Testen OK
    if [ -z "$username" ] || [ -z "$password" ] || [ -z "$databasename" ] || [ -z "$mariacommand" ]; then
        echo "All parameters must be provided and not empty."
        return 1
    fi

    # Ausführen des MariaDB-Befehls und Erfassen des Ergebnisses
    result_mariarest=$(echo "$mariacommand;" | MYSQL_PWD=$password mariadb -u"$username" "$databasename" -N) 2>/dev/null

    # Testausgabe des MySQL-Befehls
    echo "$result_mariarest"
}

function saveinventar() {
    # Letzte Bearbeitung 08.02.2025
    #
    # Speichert den OpenSim Inventar mit "save iar" in ein Archiv.
    #
    # $1: Vorname
    # $2: Nachname
    # $3: Passwort
    # $4: Archivpfad
    # $5: DB Benutzername
    # $6: DB Passwort
    # $7: DB Name
    #
    # Beispiel: bash saveinventar.sh "Zain" "Hassan" "geheimesPasswort" "/opt/backup/inventar" "dbuser" "dbpass" "dbname"
    # Return: 0 wenn erfolgreich, 1 wenn der Screen nicht existiert
    local SAVEINVSCREEN="sim1"
    local vorname="$1"
    local nachname="$2"
    local passwort="$3"
    local archivpfad="$4"
    local db_username="$5"
    local db_password="$6"
    local db_name="$7"

    # Sicherstellen, dass das Archivverzeichnis existiert
    mkdir -p "$archivpfad"

    # UUID des Benutzers aus der Datenbank auslesen
    local query="SELECT PrincipalID FROM UserAccounts WHERE FirstName='$vorname' AND LastName='$nachname'"
    local user_uuid=$(mariarest "$db_username" "$db_password" "$db_name" "$query")
    user_uuid=$(echo "$user_uuid" | awk '{print $1}')

    if [ -z "$user_uuid" ]; then
        echo "Benutzer nicht gefunden."
        return 1
    fi

    # Liste der Inventarordner des Benutzers aus der Datenbank auslesen
    query="SELECT folderName FROM inventoryfolders WHERE agentID='$user_uuid'"
    local inventarpfad=$(mariarest "$db_username" "$db_password" "$db_name" "$query")
    IFS=$'\n' read -rd '' -a inventarpfad <<<"$inventarpfad"

    if [ ${#inventarpfad[@]} -eq 0 ]; then
        echo "Keine Inventarordner gefunden."
        return 1
    fi

    # Prüfen, ob der Screen existiert
    if ! screen -list | grep -q "$SAVEINVSCREEN"; then
        # log info "OSCOMMAND: Der Screen $SAVEINVSCREEN existiert nicht"
        echo "OSCOMMAND: Der Screen $SAVEINVSCREEN existiert nicht"
        return 1
    fi

    # Schleife über alle Verzeichnisse und Backup durchführen
    for verzeichnis in "${inventarpfad[@]}"; do
        # Verzeichnisname in Anführungszeichen setzen
        local verzeichnis_escaped="\"$verzeichnis\""
        # Leerzeichen im Verzeichnisnamen durch Unterstriche im Dateinamen ersetzen
        local datei_name=$(echo "$verzeichnis" | tr ' ' '_')
        local datei="${archivpfad}/${vorname}_${nachname}_${datei_name}.iar"
        echo "[DEBUG] Speichere Verzeichnis: $verzeichnis_escaped -> Datei: $datei"
        # log info "OSCOMMAND: save iar $vorname $nachname $verzeichnis_escaped ***** $datei"
        screen -S "$SAVEINVSCREEN" -p 0 -X eval "stuff 'save iar $vorname $nachname $verzeichnis_escaped $passwort $datei'^M"
        # Pause von 60 Sekunden zwischen den Sicherungen
        sleep 60
    done

    return 0
}

vorname="$1"
nachname="$2"
passwort="$3"
archivpfad="$4"
db_username="$5"
db_password="$6"
db_name="$7"

# Beispiel: bash saveinventar.sh "Zain" "Hassan" "geheimesPasswort" "/opt/backup/inventar" "dbuser" "dbpass" "dbname"
saveinventar "$vorname" "$nachname" "$passwort" "$archivpfad" "$db_username" "$db_password" "$db_name"
'''
Ein Metaversum sind viele kleine Räume, die nahtlos aneinander passen,
sowie direkt sichtbar und begehbar sind, als wäre es aus einem Guss.



Zitieren


Nachrichten in diesem Thema
IAR Backup für Anfänger - von Manfred Aabye - 08.02.2025, 13:02
RE: IAR Backup für Anfänger - von Manfred Aabye - 08.02.2025, 16:32

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 4 Gast/Gäste