Archiv verlassen und diese Seite im Standarddesign anzeigen : rm des letzten backups
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
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
vielen dank
ich werd das die nächsten tage probieren wenn bereits ein paar backups vorhanden sind :)
meld mich dann nochmals
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
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
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()
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
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
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
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
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
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...
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?
* 1 * * * /path/to/script
das läuft dann aber oft...
nimm "reoback" (Google, glaube bei reoback.sf.net!?), das ist auch ein (Perl-) Skript, kann das aber schon alles und automatisch.
Greetz
Thomas
@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...
mit der Einstellung führt er es von 1:00 bis 1:59 minütlich aus... und das ist verdammt oft...
da hast du recht
das ist viel zu oft
einmal täglich reicht
war das ein versehen bert2002???
das läuft dann aber oft...
Ohh mist vertan ;)
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
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
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.