Contao Konferenz & College 2019 in Duisburg - JETZT TICKET SICHERN!
Ergebnis 1 bis 10 von 10

Thema: Automatisches Backup von Files Ordner via Cronjob

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

    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
    574
    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 10:26 Uhr)
    Grüße, Stefko

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

    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
    428

    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 17:35 Uhr)

  5. #5
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.615
    User beschenken
    Wunschliste

    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 public.andreasburg.de/contao/reoback.zip
    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
    572
    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.120
    User beschenken
    Wunschliste

    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

  8. #8
    Contao-Fan Avatar von k-webdesign
    Registriert seit
    07.06.2010.
    Ort
    Karlsruhe
    Beiträge
    572
    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 12:21 Uhr)

  9. #9
    Contao-Fan Avatar von kischd
    Registriert seit
    25.06.2009.
    Ort
    Karlsruhe
    Beiträge
    925

    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.044
    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

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
  •