Bash-Script Script für die Sicherung div. Ordner zw. 2 Shares [Synology]

Frank73

Active member
Hallo,

ich bin aktuell dabei meine Dokumente von ecoDMS nach paperless-ngx zu migrieren. Hierfür habe ich einen separaten Share angelegt und würde jetzt gerne bestimmte Verzeichnisse von diesem Share auf einen anderen Share (gleiche NAS und Volume) kopieren, welcher auch per HB regelmäßig gesichert wird (siehe auch hier ff.).

Ich würde das Script gerne als root ausführen, damit die Rechte über den Parameter "-a" übernommen werden. Das funktioniert jetzt auch soweit. Ich hatte allerdings das Problem, dass wenn die Protokoll-Dateien noch nicht vorhanden waren, der Benutzer root diese angelegt hat und ich mit dem normalen user darauf keine Leserechte hatte. Dies würde ich im Script jetzt wie folgt abfangen wollen.
Code:
#!/bin/sh

#Version: 15.03.2024
#Datensicherung Share "paperless" auf auf den Share "Daten"
#ausser die in der Variable "ausschluss" hinterlegten Ordner/Dateien
#Aktuell nur die PostgreSQL-DB, da diese über einen tgl. Dump im
#backup-Verzeichnis gesichert wird; wird über dieses Job allerdings
#mitgesichert!

backup_source="/volume1/docker/paperless/"
backup_target="/volume1/vm_daten/backup"
ausschluss="/volume1/vm_daten/test/ausschluss.txt"
protokoll="/volume1/vm_daten/test/protokoll.log"
protokoll_err="/volume1/vm_daten/test/protokoll_err.log"
akt_date=$(date +%d.%m.%Y)
akt_time=$(date +%H:%M:%S)

ls $protokoll > /dev/null 2>&1
rc_1=$?
ls $protokoll_err >/dev/null 2>&1
rc_2=$?

rc=$(expr $rc_1 + $rc_2)

if  [ $rc -gt 0 ]
    then
        echo "protokolldatei nicht vorhanden"
        exit 64
fi

echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" >> $protokoll_err
echo "Datum der Sicherung: " $akt_date " / " $akt_time >> $protokoll_err

echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" >> $protokoll
echo "Datum der Sicherung: " $akt_date " / " $akt_time >> $protokoll

rsync -av --exclude-from="$ausschluss" ${backup_source} ${backup_target} >> $protokoll 2>> $protokoll_err
Sobald eine Protokoll-Datei nicht vorhanden ist, soll er mir den Exit-Code 64 ausgeben (ist kein reservierter Code). Im Aufgabenplaner der Synology habe ich eine Aufgabe mit einem benutzerdefinierten Skript erstellt, welches mir bei einem Exitcode <> 0 eine Mail mit dem Hinweis der fehlenden Protokolldateien sendet.

Da ich vom Programmieren so gut wie keine Ahnung habe, wäre es super, wenn hier mal ein paar Experten draufschauen. Bin über jeden Verbesserungsvorschlag dankbar.

Gruß
Frank
 
Ich würde mittels
Code:
chmod
die Dateirechte ändern.
Vorher prüfen ob die Dazei existiert
Code:
if [ -f Datei ]
then
   chmod ...
fi
 
Ich würde die Protokolldatei direkt in deinem Script erstellen und die nötigen Rechte setzten. In etwa so…

Bash:
if [ ! -f "${protokoll}" ]; then
    touch "${protokoll}"
    chmod 777 "${protokoll}"
else
    chmod 777 "${protokoll}"
fi

Aus 777 kannst du ggf. auch 755 o.ä. machen, je nachdem, welche Ansprüche du hast. Du könntest auch über chown Eigentümer und Gruppe der Datei ändern.
 
Zuletzt bearbeitet:
Danke für euren Input. Habe den Teil
Code:
ls $protokoll > /dev/null 2>&1
rc_1=$?
ls $protokoll_err >/dev/null 2>&1
rc_2=$?

rc=$(expr $rc_1 + $rc_2)

if  [ $rc -gt 0 ]
    then
        echo "protokolldatei nicht vorhanden"
        exit 64
fi
ersetzt durch
Code:
if [ ! -f "${protokoll}" ]
    then
        touch "${protokoll}"
        chmod 666 "${protokoll}"
        chown vm_frank: "${protokoll}"
fi               

if [ ! -f "${protokoll_err}" ]
    then
        touch "${protokoll_err}"
        chmod 666 "${protokoll_err}"
        chown vm_frank: "${protokoll_err}"
fi

Bisher erstelle ich mit den Zeilen
Code:
BACKUP_NUM_KEEP="+10"

docker exec ppl_pg_16 sh -c  "pg_dumpall -U Name > /backup/backup_\`date +%d-%m-%Y"_"%H_%M_%S\`.sql
find /backup/backup*.sql -type f -mtime $BACKUP_NUM_KEEP -delete"
einen Dump meiner PostgreSQL-DB, wobei immer die 10 aktuellsten Verisionen aufgehoben werden. Sobald meine Migration in paperless abgeschlossen ist, würde ich nur noch einen Dump die Woche erstellen und diesen mit dem Script aus #1 auf meinen mit HB abgesicherten Share syncen wollen (die 2. Zeile mit dem Löschen würde dann wegfallen).

Hier kann ich dann doch hingehen und sagen, dass wenn der Exitcode aus dem dump 0 zurückgibt, das "Sicherungsscript" anlaufen soll, oder muss ich noch was beachten?
Würdet ihr das in einem Script abhandeln, oder das 2. Script aus dem 1. heraus ausführen?
Noch eine Frage zum Verständnis:
Die doppelten Anführungszeichen um die Variablen dienen dazu, dass bei Leerzeichen in Dateinamen auch als solche gelesen werden können (Quotierung). Kann ich diese dann generell um alle Variablen setzen (einheitliches Vorgehen)?

Danke und Gruß
 
Die doppelten Anführungszeichen um die Variablen dienen dazu, dass bei Leerzeichen in Dateinamen auch als solche gelesen werden können (Quotierung). Kann ich diese dann generell um alle Variablen setzen (einheitliches Vorgehen)?
Es macht immer Sinn Variableninhalte in Doublequotes zu setzen denn die koennen auch wie Dateinamen Leerzeichen enthalten und sonst unerwartete Effekte ausloesen.
 

Letzte Anleitungen

Statistik des Forums

Themen
5.880
Beiträge
57.441
Mitglieder
5.813
Neuestes Mitglied
Blacksnofru
Zurück
Oben