PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : rm des letzten backups



Pillem
10.06.06, 20:51
hiho zusammen

ich hab mir jetzt ein backupscript eingerichtet, welches verschiedene ordner in eine tar.gz packt.
es wird immer ein neuer ordner mit der aktuellen datum und zeit angelegt in welches die tar.gz erstellt wird.

da ich meinen server nun nicht zumüllen möchte reichen mir 2 backups vollkommen aus

wie heißt der rm befehl dazu???

die ordner gehen immer so los

backup_DATUM_ZEIT

ich bedanke mich schon im vorraus

kreol
10.06.06, 22:27
Du könntest mit find nach Dateien suchen die älter als n Tage sind und diese löschen. Beispiel
find /backup/verzeichnis -name 'backup*' -ctime +3 -exec rm {} \;löscht alle Dateien im angegebenen Verzeichnis die mit 'backup' anfangen und älter als 3 Tage sind.

Um sicherzugehen, daß auch wirklich zwei backups verbleiben, solltest Du die Anzahl der Dateien im Verzeichnis abfragen und nur löschen, wenn mindestens drei Dateien vorhanden sind.
anzahl=$(find /backup/verzeichnis -type f -print | wc -l)liefert die Anzahl der Dateien und schreibt sie in die Variable anzahl. Jetzt noch ein kleines if und gut...
anzahl=$(find /backup/verzeichnis -type f -print | wc -l)
if ( $anzahl gt 2 ) ; then
find /backup/verzeichnis -name 'backup*' -ctime +7 -exec rm {} \;
echo "Dateien werden gelöscht"
else
echo "Nicht genügend Dateien zum Löschen vorhanden"
fiGeht bestimmt auch eleganter, aber es sollte funktionieren. Habs aber nicht getestet!


Kreol

Pillem
13.06.06, 12:52
vielen dank
ich werd das die nächsten tage probieren wenn bereits ein paar backups vorhanden sind :)
meld mich dann nochmals

kreol
13.06.06, 14:05
Vllt. testest Du es erstmal mit ein paar unwichtigen Dateien. Du kannst z.B. mit "touch backup1 backup2 backup3" 3 leere Dateien erstellen und mit "touch -t YYYYMMDDhhmm datei" das Erstellungsdatum ändern. Also wenn die heute erstellte Datei um 10 Tage altern soll:"touch -t 200606031200 backup1". Dann kannst Du ungefährdet experimentieren.


Kreol

Pillem
13.06.06, 21:20
danke :-)
hab jetzt ein paar files angelegt

beim ausführen kommt folgendes:


./delscript
./delscript: line 3: 14: command not found


#!/bin/bash
anzahl=$(find /backup/ -type f -print | wc -l)
if ( $anzahl gt 2 ) ; then
find /backup/ -name 'sicherung*' -ctime +7 -exec rm {} \;
echo "Dateien werden gelöscht""
else
echo "Nicht genügend Dateien zum Löschen vorhanden""
fi

3:14 ist der abschnitt ( $anzahl gt 2 ) oder?
bin leider kein coder. kannst du mir sagen an was das liegt?

vielen dank für deine mühe

hwm
13.06.06, 21:44
Mach's mit Python. Hab mir mal ein Backup-Programm erstellt, welches auf DVD-RAM sichert. Da mach ich das so, wenn die DVD-RAM voll ist:



if platz > freier_platz:
dateiliste = os.listdir(dvd)
dateiliste.sort()
for i in dateiliste:
print i
print "Fehler, nicht genug freier Platz auf DVDRAM"
print "Soll die älteste Datei " +dateiliste[0] +" gelöscht werden? (j/n)"
while True:
antwort = raw_input()
if antwort == 'j' or antwort == 'n':
break
else:
print "Bitte j oder n eingeben"
if antwort == 'j':
print dateiliste[0] +" wird gelöscht"
os.remove(dvd +os.sep +dateiliste[0])
else:
print "Programm wird beendet"
sys.exit()

kreol
13.06.06, 22:04
Mein Fehler. Versuchs mit
if [ $anzahl -gt 2 ] ; thendann sollte es klappen. Also eckige Klammern statt runder und ein "-" vor das gt...

Zum Testen kannst Du das rm hinter exec durch 'ls -l' ersetzen, dann werden die Dateien angezeigt und nicht gelöscht.

Und Du hast bei den echo-Befehlen ein paar Anführungszeichen zuviel...


Kreol

Pillem
14.06.06, 16:45
hey hey vielen dank

jetzt wird das script schonmal verarbeitet


sudo ./delscript
Dateien werden gelöscht
else
echo Nicht genügend Dateien zum Löschen vorhande


aber diese dateien sollten doch reichen oder nicht???

-rw-r--r-- 1 root root 0 Jun 3 12:00 sicherung
drwxr-xr-x 2 root root 2048 Jun 10 16:56 sicherung_10_06_2006_Jun_16_55
drwxr-xr-x 2 root root 2048 Jun 11 10:41 sicherung_11_06_2006_Jun_10_39
-rw-r--r-- 1 root root 0 Jun 3 12:00 sicherung_31

das script sieht jetzt so aus:

#!/bin/bash
anzahl=$(find /backup/ -type f -print | wc -l)
if [ $anzahl -gt 2 ] ; then
find /backup/ -name 'sicherung*' -ctime +7 -exec ls -l {} \;
echo "Dateien werden gelöscht""
else
echo "Nicht genügend Dateien zum Löschen vorhande
fi

bert2002
14.06.06, 16:53
Da will ich meinen Mist doch auchmal dazugeben ;)


#!/bin/bash
anzahl=$(find /backup/ -type f -print | wc -l)
if [ $anzahl -gt 2 ] ; then
cd /backup/ && OLD=$(ls -tr | head -1)
rm -rf $OLD
fi

Das mit der Anzahl finde ich Klasse, kannte ich auch noch nicht also direkt mal übernommen ;)
Mein Script löscht immer das letzte Backup bzw. die älteste Datei.

MfG bert2002

kreol
15.06.06, 05:06
Mein Script löscht immer das letzte Backup bzw. die älteste Datei.Dein Script ist hier ungetestet, aber im grundlegenden Ansatz wohl besser.

Nach meinem Vorschlag werden alle Backups nach gewisser Zeit gelöscht, unabhängig davon ob es auch neue gibt...

Die reine Anzahl der Dateien im Verzeichnis ist als Auswahlkriterium wohl nicht ausreichend, es sei denn, es ist sichergestellt, daß es mehr/gleich viele erzeugte wie gelöschte Backups gibt. Sprich, die Sicherung sollte parallel im gleichen Script ausgeführt werden. Erst sichern, dann löschen....

@Pillem: Sieht doch gut aus. Nimm noch die überflüssigen Anführungszeichen raus, sonst verfälscht Du Dir die Ausgabe...

Solange Du "erst sichern, dann löschen" bedenkst, führen, wie so oft, beide Wege zum gewünschten Ziel. Der von bert2002 hat aber unbestritten Vorzüge... ;)


Kreol

Pillem
16.06.06, 08:26
oja die anführungszeichen.
son mist. hab die jetzt alle berichtigt.

aber er sagt er löscht aber er listet die ordner nicht auf:
ich hab den rm durch ls -l ersetzt zum test.

an was liegt das denn?


-rw-r--r-- 1 root root 0 Jun 3 12:00 sicherung
drwxr-xr-x 2 root root 2048 Jun 10 16:56 sicherung_10_06_2006_Jun_16_55
drwxr-xr-x 2 root root 2048 Jun 11 10:41 sicherung_11_06_2006_Jun_10_39
-rw-r--r-- 1 root root 0 Jun 3 12:00 sicherung_31
xxxxxxxxxxxxxxx:/backup$ sudo ./delscript
Dateien werden gelösch

marce
16.06.06, 08:37
cd /Verzeichenis/mit/Backupdateien
rm -r $(date -d -2days +%Y%m%d)*

löscht die Datei oder Verzeichnis, welche(s) vom Namen her 2Tage alt ist - also einfach bei jedem daily-Aufruf mit in's Script und gut ist...

Pillem
16.06.06, 09:22
so zusammen
jetzt hab ich es nach bert2002 lösung gemacht
klappt einwandfrei.
vielen dank!!!
ich möchte mich für eure bemühungen bedanken!!!

wie bind ich das script jetzt am besten als cron job ein sodass er einmal täglich läuft?

bert2002
16.06.06, 12:36
* 1 * * * /path/to/script

marce
16.06.06, 12:37
das läuft dann aber oft...

tschloss
16.06.06, 12:42
nimm "reoback" (Google, glaube bei reoback.sf.net!?), das ist auch ein (Perl-) Skript, kann das aber schon alles und automatisch.

Greetz
Thomas

Pillem
16.06.06, 12:59
@tschloss: danke für den hinweis werd ich mir mal ansehen!
der link ist: http://reoback.sourceforge.net/


@marce: findest du denn ein tägliches backup zu häuftig??? bin der meinung dass ein tägliches relevant ist!!!

@bert2002:

* 1 * * * /path/to/script
führt er das script dann einmal täglich um 1 uhr aus???
was genau muss ich tippen um den cron hinzufügen?
cron -e??? hab das bisther ers einmal für webdruid benötigt...

marce
16.06.06, 13:02
mit der Einstellung führt er es von 1:00 bis 1:59 minütlich aus... und das ist verdammt oft...

Pillem
16.06.06, 13:24
da hast du recht
das ist viel zu oft
einmal täglich reicht

war das ein versehen bert2002???

bert2002
16.06.06, 13:54
das läuft dann aber oft...
Ohh mist vertan ;)

kreol
16.06.06, 15:46
0 23 * * * username /pfad/zum/Scriptführt das Script einmal täglich um 23:00h aus.

Entweder Du trägst den cronjob händisch mit dem Texteditor Deiner Wahl in die /etc/crontab ein oder mit 'crontab -e'.

Wenn in der crontab allerdings schon ein Eintrag besteht, der die Scripte im Verzeichnis /etc/cron.daily aufruft, legst Du einfach das Script da rein.


Kreol

Pillem
18.06.06, 08:52
vielen dank jung
ich habs jetzt in die /etc/cron.daily kopiert und siehe da es funktioniert.
heute morgen um 5 hat er das backup erstellt und das älterste gelöscht.

perfekt!!!!
jetzt funkt es!!!



DaNkE