backup_exlusions logs vs. Wordpress Restore

  • Hallo Zusammen,


    letzte Woche hatte ich einen Fall bei dem ich eine Wordpress_Installation mit diversen Plugins über das PD-Admin Backup zurück sichern musste.

    Nach dem Restore hat das Backend nicht mehr funktioniert und im error_log waren tonnen Meldungen das Dateien fehlen.


    Nach einigem hin und her ist mir aufgefallen das die Unterverzeichnisse alle mit "logs" beginnen und dann ist es mir wie Schuppen von den Augen gefallen...

    Dadurch das "logs" exkludiert ist werden ALLE Unterverzeichnisse eines Kundenwebs nicht gesichert die "logs" heißen, auch wenn wie im Subdomains-Verzeichnis liegen.


    Kann man das irgendwie so machen das die Backups vollständig sind ohne das man auch die logs aus dem Root-Customer-Verzeichnis mit sichern muss?


    viele Grüße

    Manfred

  • Mist, das ist übel. Viele CMS haben ein Verzeichnis "logs", wenn auch mal mehr - mal weniger wichtig.


    In /opt/pdadmin/etc/pdadmin.conf gibt es eine Variable bei der Backup Sektion, wo das excluden festgelegt wird. Durch Deine Beobachtung überlege ich fast, diesen Eintrag zu entfernen und das Mitsichern des logs Zeugs hinzunehmen. Immer noch besser wie wenn etwas fehlt.

  • Ausgeführt wird das Backup in /opt/pdadmin/bin/backup_user.sh. Darin enthalten sind folgende Zeilen:

    Wird in der pdadmin.conf logs exkludiert, wird tar mit [...] --exclude=logs [...] ausgeführt. Dies schließt alle Dateien mit dem Muster logs aus. Ein erster Lösungsvorschlag wäre die Variable in pdadmin.conf leer zu lassen und --exclude=$HOME/logs in der tar Zeile (vor oder nach $PARM_EXCLUDE) zu setzen:

    Shell-Script
    1. nice -n 19 setuidgid $USER tar --preserve-permissions --exclude=$HOME/logs $PARM_EXCLUDE -czf $BACKUPDIR/user/$USER/$ROTATION/backup.tar.gz $HOME

    Wenn ich gerade kein Denkfehler habe, sollte so /home/<LOGINID>/logs ausgelassen werden. Und dort werden ja per default die Logs platziert.

  • Kurzes Feedback:


    Die o.g. Änderungen funktionieren auf meinem Server problemlos. Der logs Ordner im Home-Verzeichnis wird ausgenommen. Andere logs Verzeichnisse werden inkludiert.


    Shell-Script: /opt/pdadmin/etc/pdadmin.conf
    1. $backup_user_exclude = '';


    Code: /opt/pdadmin/bin/backup_user.sh
    1. nice -n 19 setuidgid $USER tar --preserve-permissions --exclude=$HOME/logs $PARM_EXCLUDE -czf $BACKUPDIR/user/$USER/$ROTATION/backup.tar.gz $HOME
  • Dies funktioniert leider nicht. Die logs Ordner werden dann trotzdem mit gesichert. Dies liegt daran, dass das Skript als root ausgeführt wird und $HOME in dem Moment /root enthält. Somit steht dort dann --exclude=/root/logs. Und würde man es escapen, stünde dort --exclude=$HOME/logs


    Sehe da also gerade keine andere einfache Lösung.

  • Ich versteh natürlich das Problem dass in $HOME mitunter was falsches drin steht wenn es im Kontext von root ausgeführt wird.

    Aber ich bin grad zu blöd um zu verstehen, warum es zu einem unterschiedlichen Verhalten kommt wenn das $HOME direkt im Script drin steht oder wenn es aus der conf Datei gezogen wird.

  • Das Skript holt sich aus der pdadmin.conf die Werte von backup_user_exclude. Wenn dort $HOME drin steht, hat dies den Wert der Systemvariable und enthält /root


    Wird dies nun übergeben, z.b. an eine andere Variable oder Skript, steht dort nicht mehr $HOME drin, sondern eben dessen Inhalt /root

    Shell-Script
    1. irgendeineVariable=$HOME
    2. echo $irgendeineVariable
    3. /root


    In der backup_user.sh wird anfangs $HOME lokal (innerhalb des Skripts) gesetzt und überschreibt damit die Systemvariable. Diese enthält dann den Pfad zum Nutzer Home-Verzeichnis. Daher kann man in der backup_user.sh auch

    --exclude=$HOME/logs

    in die Zeile mit tar einfügen. Somit hat man einen absoluten Pfad zum logs Verzeichnis des jeweiligen Nutzers. Dies wird dann ausgenommen.


    Hat man \$HOME/logs in der Variable stehen, wird dies durch \ escaped und als normaler String behandelt.

  • Wenn man nur $HOME/logs angibt, kommt /root/logs raus, da die Variable schon in der backup.pl ausgewertet wird, durch \ kann man es eigentlich an einen Skript durchreichen, warum es dann in der backup_user.sh nicht ausgewertet wird … hm …


    der Aufruf sieht dann wie folgt aus

    Code
    1. USER 22357 14.5 0.0 26140 2576 pts/0 SN+ 09:19 0:00 tar --preserve-permissions --exclude=$HOME/logs -czf /backup/user/USER/0/backup.tar.gz /home/USER

    erwartet hätte ich

    Code
    1. USER 22357 14.5 0.0 26140 2576 pts/0 SN+ 09:19 0:00 tar --preserve-permissions --exclude=/home/USER/logs -czf /backup/user/USER/0/backup.tar.gz /home/USER

    :/

  • Ich habe bzgl. der Problematik mit dem logs Ordner ein guten Tipp bekommen, womit das Problem updatesicher gelöst werden kann. Schaut man in die man Page von tar steht dort 'exclude=PATTERN' - bei PATTERN kann man selbstverständlich auch mit Wildcards arbeiten. Kurzum


    $backup_user_exclude = '/home/*/logs';


    bringt hier die gewünschte Lösung :)