Zitat von
dirksche
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($path, 3600*24*$days);
echo '<hr><p>'.count($deleted)." alte Backups gelöscht:<br>" .implode("<br>", $deleted);
?>
Lesezeichen