Zwei Backups - alte löschen

maxB

New Member
Sehr geehrte Leserinnen und Leser,

ich habe eine Fragestellung zu dem Backup-Feature in PLESK. Ich rede von dem Feature "pleskbackup", welches z.B. über Cronjobs sehr nützlich ist. Nun ist es so, dass ich im PLESK den Cronjob eingerichtet habe und nächtlich ein komplettes Backup von allen Kunden und Domains, Mails & Datenbanken erstellt werden soll.

Code:
30 3 * * * /usr/local/psa/bin/pleskbackup all /srv/backup/komplett.bkp

Nun habe ich zusätzlich herausgefunden, dass es möglich ist, den Dateinamen des Backups um das Datum zu ergänzen.

Code:
komplett_`date +%Y%m%d`.bkp

Damit funktioniert es jedenfalls über PuTTy.
Aber darum geht es auch erst einmal nicht. Meine Frage ist folgende: Wir möchten uns nun einen simplen FTP-Server anschaffen, auf welchem die Backups dann nächtlich abgelegt werden. Wenn ich ohne die Datumsergänzung arbeite, dürfte das alte Backup jede Nacht überschrieben werden - grundsätzlich insofern gut, als dass es platzsparend ist. Allerdings hat man ja auch schon Pferde k***en sehen - was mache ich also, wenn es gerade um 3.30 Uhr nachts zu einem Problem mit dem Server kommt und der Backupvorgang nicht abgeschlossen wird?
Daher würde ich eben gerne mit der Datumsergänzung arbeiten. Wie kriege ich es also hin, dass ich immer nur 2-3 Backups auf dem FTP-Server liegen habe? Das heißt: sobald mehr als drei Backups auf dem Server liegen, soll das jeweils älteste gelöscht werden.

Oder hat jemand eine andere Idee, wie ich dieses Problem am besten löse?

Ich bin leider kein Linux-Crack - vielleicht ist die Lösung sogar sehr nahe.

Auf unserem Server läuft SuSE 9.3 mit Plesk 8.2.1.

Vielen Dank an alle Leser und Helfer.
maxB
 
Ein Shellscript schreiben!

"ls -tr | wc -l" gibt dir die Anzahl der Dateien in einem Verzeichnis. Dann noch eine einfache if-Abfrage, damit das mit dem dritten Backup löschen realisiert wird.
 
Hallo!
Ich habe mal eine ähnliche Sache vorgehabt und mir damit beholfen dem Backup kein Datum in der Form Jahr_Monat_Tag anzuhängen, sondern habe die Wochentage verwendet.

Code:
komplett_`date +%a`.bkp

ergibt

Code:
komplett_Mon.bkp

Die Woche drauf wird die bestehende Datei durch die neue mit der jeweiligen Kennung überschrieben.

Dadurch hast du aber nicht die gewünschten zwei Backups auf dem Backupserver liegen, sondern sieben. Solange der der Plattenplatz das hergibt dürfte das ganze damit ohne Probleme laufen.

DN
 
Das folgende Skript habe ich mal für einen Kunden zusammengescribbelt. Es speichert die Plesk-Backupdatei mit Datum und prüft anschl. ob es eine Datei nach dem Format gibt, die älter als 7 Tage ist. Wenn ja, weg damit. Das geht auch anders, z.B. durch auslesen des Erstellungsdatums, aber das ging mir damals so von der Hand.

Code:
#!/bin/bash

# Variablen definieren
datum=`date +%d-%m-%Y`
alt=`date +%d-%m-%Y -d "-7 days"`
ordner="/srv/backup"
logfile="/var/log/plesk-backup.log"

# Logdatei vorhanden?
if [ ! -f $logfile ]; then
  touch $logfile
fi

# Plesk Backup durchfuehren
echo `date +%T`' -- Plesk Backup Prozess gestartet' >> $logfile
/usr/local/psa/bin/pleskbackup --all $ordner/$datum.plesk
echo `date +%T`' -- Plesk Backup Prozess beendet' >> $logfile

# chmod/chown aendern
chown backupusr:root $ordner/$datum.plesk
chmod 0460 $ordner/$datum.plesk

# Alte Dateien zum Loeschen vorhanden?
if [ -f $ordner/$alt.plesk ]; then
  echo `date +%T`" -- Alte Backupdatei vom $alt wird geloescht" >> $logfile
  rm $ordner/$alt.plesk

HTH!
marneus
 
Das hört sich schon einmal alles sehr gut an. Ich werde das so bald wie möglich testen.

Vielen Dank schon einmal für Eure schnelle und qualifizierte Hilfe.
 
Also das Shell-Script von marneus klappt super! Alles toll!
Aber wie bereits erwähnt bin ich nicht gerade der Linux-Profi. Wie setze ich es denn jetzt um, dass dieses Script eben auch in Bezug auf einen FTP-Server läuft, auf den ich eben keinen Shell-Zugriff habe?

Also wie stelle ich nun quasi im SSH eine Verbindung zum FTP-Server her und lasse dort die alten Backup-Dateien löschen?

Für weitere Hilfe wäre ich sehr dankbar.

EDIT:
Hochgeladen bekomme ich es natürlich, indem ich einfach den Ordner abändere (ftp://USER:PASSWORD@IP/). Doch ich kann natürlich über den Shell-Zugang auf meinem Hauptserver nicht die Daten auf dem FTP-Server löschen. Eine andere Möglichkeit auf den FTP-Server zu kommen habe ich nicht, da es sich um einen speziellen Backup-Space von T-Online handelt, auf den auch nur T-Online Server intern zugreifen können.
 
Last edited by a moderator:
Irgendwie komm ich heute nicht ins Bett. Hier eine angepasste ungetestete Version mit FTP Transfer:
Code:
#!/bin/bash

# Variablen definieren
datum=`date +%d-%m-%Y`
alt=`date +%d-%m-%Y -d "-7 days"`
ordner="/srv/backup"
logfile="/var/log/plesk-backup.log"

# FTP Variablen
FTP_SERVER="backup.t-offline.de"
FTP_USER="skill0r"
FTP_PASS="s3cr3t"
FTP_DIRECTORY=""

# Logdatei vorhanden?
if [ ! -f $logfile ]; then
  touch $logfile
fi

# Plesk Backup durchfuehren
echo `date +%T`' -- Plesk Backup Prozess gestartet' >> $logfile
/usr/local/psa/bin/pleskbackup --all $ordner/$datum.plesk
echo `date +%T`' -- Plesk Backup Prozess beendet' >> $logfile

# chmod/chown aendern
chown backupusr:root $ordner/$datum.plesk
chmod 0460 $ordner/$datum.plesk

# Alte Dateien zum Loeschen vorhanden?
if [ -f $ordner/$alt.plesk ]; then
  echo `date +%T`" -- Alte Backupdatei vom $alt wird geloescht" >> $logfile
  rm $ordner/$alt.plesk


echo "\nStarte FTP-Transfer nach $FTP_SERVER von Datei $datum.plesk ..." >> $logfile

FILENAME=`basename $ordner/$datum.plesk`

ftp -n $FTP_SERVER <<End-of-Session
user "$FTP_USER" "$FTP_PASS"
binary
bell
cd $FTP_DIRECTORY
pwd
put "$FILENAME"
ls
bye
End-of-Session

echo "Transfer erfolgreich beendet.\n" >> $logfile
 
Vielen Dank nochmals. Ich habe das bisher nicht testen können - aber werden bei dieser Version auch alte Backups gelöscht?
 
Back
Top