Contao-Camp 2024
Ergebnis 1 bis 13 von 13

Thema: Automatisches Backup von Files Ordner via Cronjob

  1. #1
    Contao-Fan Avatar von dirksche
    Registriert seit
    05.08.2009.
    Ort
    Grosslittgen
    Beiträge
    641

    Standard Automatisches Backup von Files Ordner via Cronjob

    Hallo liebe Community,

    ich würde bei Webgo gerne via Cronjob jede Nacht Backup des Files Ordners machen. Kennt jemand ein gutes Script dafür? Ich denke PHP ist wegen der Laufzeitbeschränkung schlecht. Geht das auch über einen SSH Befehl z.B
    Code:
    zip -r Meine-Zipdate.zip Ordner/
    ?

  2. #2
    Contao-Fan Avatar von Stefko
    Registriert seit
    25.10.2012.
    Ort
    Karlsruhe
    Beiträge
    771
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von dirksche Beitrag anzeigen
    Hallo liebe Community,
    ich würde bei Webgo gerne via Cronjob jede Nacht Backup des Files Ordners machen. Kennt jemand ein gutes Script dafür? Ich denke PHP ist wegen der Laufzeitbeschränkung schlecht. Geht das auch über einen SSH Befehl z.B
    Code:
    zip -r Meine-Zipdate.zip Ordner/
    ?
    Für welche Contao Version?
    Für die 3er habe ich mir mal ein Skript gebastelt, dass ich per CronJob aufrufe, funktioniert tadellos. Sichert die Datenbank und die Dateien und löscht diese nach einer einstellbaren Zeit ($days) wieder.
    Für Contao 4 müsste es angepasst werden.
    Nachtrag: das Skript in den Contao-Wurzelordner packen und per Cronjpb aufrufen, dann funktioniert es auch mit Contao4

    PHP-Code:
    <?php
        
        
    // Variablen für das Backup
        
    $dbHost "localhost";                    // Datenbank Host
        
    $dbDatabase "database";                // Name der Datenbank
        
    $dbUser "user";                        // Datenbank User
        
    $dbPass "password";                    // Datenbank Passwort
        
    $project "Projektname";                // Projektname
        
    $root "https://domain.tld/";            // Http-Pfad der Installation mit / am Ende
        
    $path "Backup-Folder";                 // Ordner für Sicherung (Ordner muss existieren)
        
    $prefix "backup";                        // Backup Name (Daten)
        
    $date date("Y-m-d_H-i-s");            // Datumsformat (für Filename)
        
    $days 14;                                // Angabe in Tagen nach denen Sicherungen gelöscht werden sollen
        
        
        // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        // Ab hier keine Änderungen mehr nötig
        // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        
        // Datenbank sichern und als gz-Archiv ablegen
        
    shell_exec('mysqldump -h '.$dbHost.' -u '.$dbUser.' -p'.$dbPass.' '.$dbDatabase.'  | gzip > '.$path.'/'.$date.'_'.$dbDatabase.'.sql.gz');
        
        
    // Daten sichern und als gz-Archiv ablegen
        
    shell_exec('tar --exclude=\''.$path.'\'* -cvpzf '.$path.'/'.$date.'_'.$prefix.'.tar.gz ./* .??*');
        
        
    // Textausgabe
        
    echo '<p>Die <strong>'.$project.'</strong> Sicherung wurde am <strong>'.$date.'</strong> erstellt.</p>';
        echo 
    '<h2>Download:</h2>';    
        echo 
    '<ul><li><a href='.$path.'/'.$date.'_'.$dbDatabase.'.sql.gz'.'>Datenbank</a></li>';
        echo 
    '<li><a href='.$path.'/'.$date.'_'.$prefix.'.tar.gz'.'>Datenstruktur</a></li></ul>';

        
        
    // Ältere DB-Sicherungen löschen
        
    function delete_older_than($dir$max_age) {
                    
    $list = array();
                    
    $limit time() - $max_age;
                    
    $dir realpath($dir);
                    if (!
    is_dir($dir)) {
                      return;
                    }
                    
    $dh opendir($dir);
                    if (
    $dh === false) {
                      return;
                    }
                    while ((
    $file readdir($dh)) !== false) {
                      
    $file $dir '/' $file;
                      if (!
    is_file($file)) {
                        continue;
                      }
                      if (
    filemtime($file) < $limit) {
                        
    $list[] = $file;
                        
    unlink($file);
                      }
                    }
                    
    closedir($dh);
                    return 
    $list;
        }

        
    $deleted delete_older_than($path3600*24*$days);
        
        echo 
    '<hr><p>'.count($deleted)." alte Backups gelöscht:<br>" .implode("<br>"$deleted);
        
    ?>
    Geändert von Stefko (08.02.2019 um 11:26 Uhr)
    Grüße, Stefko

  3. #3
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.788

    Standard

    Ich hatte das Shell-Skript so ähnlich schon mal im Forum gepostet:

    backup.sh im Server-Root:
    Code:
    #!/bin/bash
    
    # Speicherpfad und Datum
    
    backup_path="/backup/web"
    date=$(date +"%Y%m%d_%H%M")
    
    # Zum Speicherpfad wechseln
    
    cd $backup_path
    
    # Standard-Dateieigenschaften setzen
    
    umask 640
    
    # Webspace rekursiv sichern
    
    zip -r contao_templates_$date.zip /webseiten/schachbund/dsbweb.2018/templates/
    zip -r contao_system_modules_$date.zip /webseiten/schachbund/dsbweb.2018/system/modules/
    zip -r contao_system_config_$date.zip /webseiten/schachbund/dsbweb.2018/system/config/
    zip -r schachbl_$date.zip /webseiten/schachbund/dsbweb.2018/web/SchachBL/
    Mit einem Cronjob wird das Skript einmal täglich aufgerufen.
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  4. #4
    Contao-Fan
    Registriert seit
    19.06.2009.
    Ort
    Mittelhessen
    Beiträge
    462

    Standard

    Ich lasse das Backup nur über den Cronjob laufen und sichere die Daten für Contao 4 nach dem Artikel von Contao 4.4 kopieren und umziehen von Erdmann & Freunde. Hatte mir das zuletzt mal für mich zusammengestrickt und hoffe, dass ich damit alles vernünftig sichere.

    Dateien
    Code:
    tar cfvz /home/www/backup/contao/backup_$(date +\%F_\%H\%M\%S)_files.tar.gz /home/www/.../contao-4-lts/composer.json /home/www/.../contao-4-lts/files /home/www/.../contao-4-lts/templates /home/www/.../contao-4-lts/system/config /home/www/.../contao-4-lts/app/config
    Die db sichere ich auch über einen Cronjob
    Code:
    mysqldump -P3306 -hlocalhost -uwebxx_x -pPASSWORD webxx_dbx --allow-keywords --add-drop-table --complete-insert --quote-names --ignore-table=webxx_dbx.tl_search --ignore-table=webxx_dbx.tl_search_index | gzip > /home/www/backup/contao/backup_$(date +\%F_\%H\%M\%S)_db_webxx_dbx.sql.gz
    Die Zugangsdaten und Pfade müssen natürlich angepasst werden.
    Geändert von andre.5tz (26.04.2018 um 18:35 Uhr)

  5. #5
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Reoback http://reoback.sourceforge.net/#Downloads (Tar Ball) ist auch ein brauchbares PearlScript für Dateisicherungen welches man über einen Cronjob laufen lassen kann. Cron-Aufruf:
    Code:
    /home/www/cgi-bin/reoback/run_reoback.sh
    Über zwei conf-Dateien kann man diverse Einstellungen vornehmen. U.a.
    • welche Ordner oder Dateien gesichert werden sollen
    • inkrementelles Sichern
    • Aufbewahrungszeit der Sicherungen
    • Sicherung auf einen zweiten Server verschieben

    Ich hatte mir das Script ganz leicht angepasst, weil mir ein paar Kleinigkeiten nicht gefielen. Hier die Anpassung und die Original pl-Datei zum Vergleichen mit der letzten Version https://public.andreasburg.de/contao/reoback.zip
    Geändert von Andreas (30.09.2019 um 17:49 Uhr)
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  6. #6
    Contao-Fan Avatar von k-webdesign
    Registriert seit
    07.06.2010.
    Ort
    Karlsruhe
    Beiträge
    644
    Partner-ID
    5911
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Stefko Beitrag anzeigen
    Für welche Contao Version?
    Für die 3er habe ich mir mal ein Skript gebastelt, dass ich per CronJob aufrufe, funktioniert tadellos. Sichert die Datenbank und die Dateien und löscht diese nach einer einstellbaren Zeit ($days) wieder.
    Für Contao 4 müsste es angepasst werden.
    Nachtrag: das Skript in den Contao-Wurzelordner packen und per Cronjpb aufrufen, dann funktioniert es auch mit Contao4

    PHP-Code:
    <?php
        
        
    // Variablen für das Backup
        
    $dbHost "localhost";                    // Datenbank Host
        
    $dbDatabase "database";                // Name der Datenbank
        
    $dbUser "user";                        // Datenbank User
        
    $dbPass "password";                    // Datenbank Passwort
        
    $project "Projektname";                // Projektname
        
    $root "https://domain.tld/";            // Http-Pfad der Installation mit / am Ende
        
    $path "Backup-Folder";                 // Ordner für Sicherung (Ordner muss existieren)
        
    $prefix "backup";                        // Backup Name (Daten)
        
    $date date("Y-m-d_H-i-s");            // Datumsformat (für Filename)
        
    $days 14;                                // Angabe in Tagen nach denen Sicherungen gelöscht werden sollen
        
        
        // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        // Ab hier keine Änderungen mehr nötig
        // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        
        // Datenbank sichern und als gz-Archiv ablegen
        
    shell_exec('mysqldump -h '.$dbHost.' -u '.$dbUser.' -p'.$dbPass.' '.$dbDatabase.'  | gzip > '.$path.'/'.$date.'_'.$dbDatabase.'.sql.gz');
        
        
    // Daten sichern und als gz-Archiv ablegen
        
    shell_exec('tar --exclude=\''.$path.'\'* -cvpzf '.$path.'/'.$date.'_'.$prefix.'.tar.gz ./* .??*');
        
        
    // Textausgabe
        
    echo '<p>Die <strong>'.$project.'</strong> Sicherung wurde am <strong>'.$date.'</strong> erstellt.</p>';
        echo 
    '<h2>Download:</h2>';    
        echo 
    '<ul><li><a href='.$path.'/'.$date.'_'.$dbDatabase.'.sql.gz'.'>Datenbank</a></li>';
        echo 
    '<li><a href='.$path.'/'.$date.'_'.$prefix.'.tar.gz'.'>Datenstruktur</a></li></ul>';

        
        
    // Ältere DB-Sicherungen löschen
        
    function delete_older_than($dir$max_age) {
                    
    $list = array();
                    
    $limit time() - $max_age;
                    
    $dir realpath($dir);
                    if (!
    is_dir($dir)) {
                      return;
                    }
                    
    $dh opendir($dir);
                    if (
    $dh === false) {
                      return;
                    }
                    while ((
    $file readdir($dh)) !== false) {
                      
    $file $dir '/' $file;
                      if (!
    is_file($file)) {
                        continue;
                      }
                      if (
    filemtime($file) < $limit) {
                        
    $list[] = $file;
                        
    unlink($file);
                      }
                    }
                    
    closedir($dh);
                    return 
    $list;
        }

        
    $deleted delete_older_than($path3600*24*$days);
        
        echo 
    '<hr><p>'.count($deleted)." alte Backups gelöscht:<br>" .implode("<br>"$deleted);
        
    ?>
    Huhu,

    ich hab mich an Stefkos Script orientiert und die Daten eingetragen. Die Datei liegt aus Sicherheitsgründen nicht im /web Root, sondern außerhalb der Installation, in /html. $path hab ich dann angepasst auf den Pfad contao4/backup. Also contao4 ist direkt in html enthalten.

    Jetzt schmeißt mir Mittwald beim Aufruf der cron.php folgenden Fehler:
    Code:
    sh: mysqldump: command not found
    sh: 281: command not found
    tar: .??*: Cannot stat: No such file or directory
    tar: Exiting with failure status due to previous errors
    <p>Die <strong>seeger</strong> Sicherung wurde am <strong>2019-09-06_12-37-27</strong> erstellt.</p><h2>Download:</h2><ul><li><a href=contao4/backup/2019-09-06_12-37-27_usr_p357273_2.sql.gz>Datenbank</a></li><li><a href=contao4/backup/2019-09-06_12-37-27_backup.tar.gz>Datenstruktur</a></li></ul><hr><p>0 alte Backups gelöscht:<br>
    Was läuft da schief?

  7. #7
    Contao-Yoda Avatar von MacKP
    Registriert seit
    15.06.2009.
    Ort
    Duisburg
    Beiträge
    13.292
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Hey k-webdesign,
    das ist eine eigenheit bei Mittwald. Du musst bei denen noch den mysql client installieren (in deren Backend). Das ist per Default nicht mit dabei, obwohl die selber empfehlen sowas über die Konsole zu machen ;-)

    Viele Grüße
    Contao Pool | C-C-A | MetaModels | [Internetseite -> Mediendepot Ruhr]
    [Arbeitet bei -> Paus Design & Medien]
    "I can EXPLAIN it to you, but I can't UNDERSTAND it for you."

  8. #8
    Contao-Fan Avatar von k-webdesign
    Registriert seit
    07.06.2010.
    Ort
    Karlsruhe
    Beiträge
    644
    Partner-ID
    5911
    User beschenken
    Wunschliste

    Standard

    Danke - wurde nachgeholt

    Jetzt lautet die Fehlermeldung aber:

    Code:
    mysqldump: [Warning] Using a password on the command line interface can be insecure.
    sh: 281: command not found
    tar: .??*: Cannot stat: No such file or directory
    tar: Exiting with failure status due to previous errors
    <p>Die <strong>seeger</strong> Sicherung wurde am <strong>2019-09-08_13-07-28</strong> erstellt.</p><h2>Download:</h2><ul><li><a href=contao4/backup/2019-09-08_13-07-28_usr_p357273_2.sql.gz>Datenbank</a></li><li><a href=contao4/backup/2019-09-08_13-07-28_backup.tar.gz>Datenstruktur</a></li></ul><hr><p>0 alte Backups gelöscht:<br>
    Geändert von k-webdesign (08.09.2019 um 13:21 Uhr)

  9. #9
    Alter Contao-Hase Avatar von kischd
    Registriert seit
    25.06.2009.
    Ort
    Karlsruhe
    Beiträge
    1.106

    Standard

    Hast du das Problem lösen können?
    Gruß Mark

  10. #10
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.477
    User beschenken
    Wunschliste

    Standard

    Offenbar sind die Programme "tar" und "gzip" nicht installiert.
    Die mysqldump Warnung kann man erstmal ignorieren, ansonsten gibt es auch dafür eine Lösung.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  11. #11
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Da ich Perl nicht kenne, kann mir hier vielleicht jemand helfen? Das Script reoback.pl funktioniert seit einiger Zeit nicht mehr richtig. Quelle ist hier oben verlinkt. https://community.contao.org/de/show...l=1#post471972

    Da gibt es eine files.conf Datei, mit welcher man die zu archivierenden Ordner oder Dateien angeben kann und auch Ordner, welche übersprungen werden sollen.
    Code:
    File: myBackup                  # Name der Backup-Datei
    /home/www/account01             # zu archivierender Ordner
    /home/www/account02             # dito
    Skip: /home/www/account01/tmp   # nicht archivieren
    Skip: /home/www/account02/tmp   # dito
    Die "Skip"-Anweisung funktioniert nicht mehr. Ich habe schon andere Pfadbezeichnungen probiert, aber alles nicht funktioniert
    Code:
    /home/www/account01/tmp
    /home/www/account01/tmp/
    /home/www/account01/tmp/*
    /home/www/account01/tmp/.*
    /home/www/account01/tmp/*.*
    Ich habe schon versucht das Sript reoback.pl zu debuggen, da ich Perl nicht kenne, stoße ich aber bald an meine Grenzen. Z.B. debuggen von Arrays, oder Lists oder ähnliche Variablen.

    Es wäre toll, wenn da mal jemand nachsehen könnte, warum das nicht mehr funktioniert. Evtl. hat sich die Software auf dem Server verändert, das Script ist ja schon ein wenig älter.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  12. #12
    Contao-Nutzer Avatar von Filip
    Registriert seit
    28.07.2017.
    Beiträge
    113

    Standard

    Zitat Zitat von Stefko Beitrag anzeigen
    Für welche Contao Version?
    Für die 3er habe ich mir mal ein Skript gebastelt, dass ich per CronJob aufrufe, funktioniert tadellos. Sichert die Datenbank und die Dateien und löscht diese nach einer einstellbaren Zeit ($days) wieder.
    Für Contao 4 müsste es angepasst werden.
    Nachtrag: das Skript in den Contao-Wurzelordner packen und per Cronjpb aufrufen, dann funktioniert es auch mit Contao4

    PHP-Code:
    <?php
        
        
    // Variablen für das Backup
        
    $dbHost "localhost";                    // Datenbank Host
        
    $dbDatabase "database";                // Name der Datenbank
        
    $dbUser "user";                        // Datenbank User
        
    $dbPass "password";                    // Datenbank Passwort
        
    $project "Projektname";                // Projektname
        
    $root "https://domain.tld/";            // Http-Pfad der Installation mit / am Ende
        
    $path "Backup-Folder";                 // Ordner für Sicherung (Ordner muss existieren)
        
    $prefix "backup";                        // Backup Name (Daten)
        
    $date date("Y-m-d_H-i-s");            // Datumsformat (für Filename)
        
    $days 14;                                // Angabe in Tagen nach denen Sicherungen gelöscht werden sollen
        
        
        // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        // Ab hier keine Änderungen mehr nötig
        // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        
        // Datenbank sichern und als gz-Archiv ablegen
        
    shell_exec('mysqldump -h '.$dbHost.' -u '.$dbUser.' -p'.$dbPass.' '.$dbDatabase.'  | gzip > '.$path.'/'.$date.'_'.$dbDatabase.'.sql.gz');
        
        
    // Daten sichern und als gz-Archiv ablegen
        
    shell_exec('tar --exclude=\''.$path.'\'* -cvpzf '.$path.'/'.$date.'_'.$prefix.'.tar.gz ./* .??*');
        
        
    // Textausgabe
        
    echo '<p>Die <strong>'.$project.'</strong> Sicherung wurde am <strong>'.$date.'</strong> erstellt.</p>';
        echo 
    '<h2>Download:</h2>';    
        echo 
    '<ul><li><a href='.$path.'/'.$date.'_'.$dbDatabase.'.sql.gz'.'>Datenbank</a></li>';
        echo 
    '<li><a href='.$path.'/'.$date.'_'.$prefix.'.tar.gz'.'>Datenstruktur</a></li></ul>';

        
        
    // Ältere DB-Sicherungen löschen
        
    function delete_older_than($dir$max_age) {
                    
    $list = array();
                    
    $limit time() - $max_age;
                    
    $dir realpath($dir);
                    if (!
    is_dir($dir)) {
                      return;
                    }
                    
    $dh opendir($dir);
                    if (
    $dh === false) {
                      return;
                    }
                    while ((
    $file readdir($dh)) !== false) {
                      
    $file $dir '/' $file;
                      if (!
    is_file($file)) {
                        continue;
                      }
                      if (
    filemtime($file) < $limit) {
                        
    $list[] = $file;
                        
    unlink($file);
                      }
                    }
                    
    closedir($dh);
                    return 
    $list;
        }

        
    $deleted delete_older_than($path3600*24*$days);
        
        echo 
    '<hr><p>'.count($deleted)." alte Backups gelöscht:<br>" .implode("<br>"$deleted);
        
    ?>
    Hi!

    Wenn ich das Backup über einen Cronjob realisiere, muss ich den absoluten Pfad für den Backup-Ordner angeben, oder?

    Sobald ich mit dem absoluten Ordner arbeite, macht mir das Script ein Backup vom kompletten Webserver.

    EDIT: Ich habe es jetzt gelöst indem ich einfach nur den spezifischen Ordner am ende des tar Befehls angebe. Die entpackte Datei sieht somit etwas komisch aus, aber es funktioniert wie es soll.


    Viele Grüße,
    Filip
    Geändert von Filip (29.01.2020 um 08:41 Uhr)

  13. #13
    Contao-Nutzer Avatar von mschindler
    Registriert seit
    25.08.2011.
    Ort
    Bad Feilnbach
    Beiträge
    191
    Partner-ID
    7698

    HTML Webgo Backups für die DB und Files für Contao 4

    Ich verwende das Script von Andreas um die DB und Files einer/mehrerer Contao 4.x Installation/en zu sichern.

    https://github.com/fiedsch/contao-4-backup-script

    Damit können für beliebig viele Tage rückwärts Sicherungen angelegt werden, die dann automatisch gelöscht werden. Funktioniert super!
    ---
    Leider bietet Webgo keine automatische Sicherungen für E-Mails.

    Hat jemand dazu eine Idee wie man das lösen kann?
    Contao Partner aus Rosenheim und München
    codesache.de
    ---
    Mitglied der Contao Community Bayern
    Aktuelle Termine zur Contao Community Bayern: contao-bayern.de

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •