Bash Backupscript
Bash Backupscript
Hallo,
ich habe ein Problem. Ich habe einen Script geschrieben, der mir meine Systeminformationen protokolliert.
Jeden Tag und bei jeder Anmeldung.
Jetzt betreibe ich das Script seit über einem Monat. Ich habe langsam zu viele Verzeichnisse und es wird unübersichtlich. Deswegen möchte ich, das sich immer am Monatsanfang alle Alten "loggs" in eine ".tar.gz" Datei verkrümeln.
Ich habe eine Variable, die das Aktuelle Datum angibt.
Das Script könnt ihr Hier einsehen.
ich habe ein Problem. Ich habe einen Script geschrieben, der mir meine Systeminformationen protokolliert.
Jeden Tag und bei jeder Anmeldung.
Jetzt betreibe ich das Script seit über einem Monat. Ich habe langsam zu viele Verzeichnisse und es wird unübersichtlich. Deswegen möchte ich, das sich immer am Monatsanfang alle Alten "loggs" in eine ".tar.gz" Datei verkrümeln.
Ich habe eine Variable, die das Aktuelle Datum angibt.
Das Script könnt ihr Hier einsehen.
Re: Bash Backupscript
Hallo,
ich konnte zwar das Problem nicht klar aus deinem Post erkennen, aber ich schätze, das es um die Archivierung der Logfiles geht.
Wenn dem so ist, wäre wahrscheinlich logrotate deine gesuchte Lösung.
ich konnte zwar das Problem nicht klar aus deinem Post erkennen, aber ich schätze, das es um die Archivierung der Logfiles geht.
Wenn dem so ist, wäre wahrscheinlich logrotate deine gesuchte Lösung.
Re: Bash Backupscript
Hi.
Wenn ich dein Script richtig gelesen habe schreibst Du ja deine Log's in die Unterordner "$parentdir/system/".
Da hilft Logrotate nicht wirklich oder? Bitte belehrt mich, falls ich das falsch in Erinnerung hab. Logrotate kann man Super mit einzelnen Logdateien verwenden.
Da Du das ja jeden Monat machen möchtest gibt es in dem Ordner (vermutlich) immer nur Dateien und Ordner aus dem letzten Monat.
Wenn Du am Anfang deines Scripts einbaust, dass er prüfen soll, ob es in dem Ordner Dateien aus dem letzten Monat gibt, diese dann mit tar wegschreibst und löscht bevor dein eigentliches Script läuft sollte das doch klappen. Beispiel:
Wenn ich dein Script richtig gelesen habe schreibst Du ja deine Log's in die Unterordner "$parentdir/system/".
Da hilft Logrotate nicht wirklich oder? Bitte belehrt mich, falls ich das falsch in Erinnerung hab. Logrotate kann man Super mit einzelnen Logdateien verwenden.
Da Du das ja jeden Monat machen möchtest gibt es in dem Ordner (vermutlich) immer nur Dateien und Ordner aus dem letzten Monat.
Wenn Du am Anfang deines Scripts einbaust, dass er prüfen soll, ob es in dem Ordner Dateien aus dem letzten Monat gibt, diese dann mit tar wegschreibst und löscht bevor dein eigentliches Script läuft sollte das doch klappen. Beispiel:
Code: Alles auswählen
#!/bin/bash
parentdir=/root/parent
date=$(date "+%d-%m-%Y")
LMFILESEXIST=0
let LASTMONTH=$(date +%m)-1
DIRECTORIES=$(find $parentdir/system/ -type d ! -iname '.' -printf '%Tm\n')
for DIRECTORY in $DIRECTORIES
do
if [ $DIRECTORY -eq $LASTMONTH ]; then
LMFILESEXIST=1
fi
done
if [ $LMFILESEXIST == 1 ]; then
cd $parentdir/system/
DIRS=$(find . -type d ! -iname '.' -printf '%p\n')
if tar -cWf $parentdir/archive/logarchive-$LASTMONTH-$date.tar $DIRS
then
if bzip2 $parentdir/archive/logarchive-$LASTMONTH-$date.tar ; then
if rm -rf $DIRS ; then
echo "Archiv $parentdir/archive/logarchive-$LASTMONTH-$date.tar.bz2 wurde erstellt und Originaldateien aus Monat $LASTMONTH geloescht"
fi
fi
fi
fi
Georg
RTFM, LMGTFY, Orakel... Ach... Warum muss man suchen...
Schrödingers Backup --- "Der Zustand eines Backups ist unbekannt, solange man es nicht wiederherstellt" --- Quelle: Nixcraft
RTFM, LMGTFY, Orakel... Ach... Warum muss man suchen...
Schrödingers Backup --- "Der Zustand eines Backups ist unbekannt, solange man es nicht wiederherstellt" --- Quelle: Nixcraft
Re: Bash Backupscript
Hallo,
danke für eure Antworten.
Ich hatte die Idee, wie oben schon gesagt, das jeden neu Angefangenen Monat alle anderen Verzeichnisse in z.B. "$HOME/.backup" zu schieben. Wenn das mit "if" zu realisieren wäre, würde ich das sehr gut finden.
Also:
danke für eure Antworten.
Ich hatte die Idee, wie oben schon gesagt, das jeden neu Angefangenen Monat alle anderen Verzeichnisse in z.B. "$HOME/.backup" zu schieben. Wenn das mit "if" zu realisieren wäre, würde ich das sehr gut finden.
Also:
Code: Alles auswählen
if $date = #(new month?)
then
.....
Re: Bash Backupscript
Du hast nicht wirklich verstanden was ich in meinem Script vorgeschlagen habe?
Da kommen so Sachen wie:
vor. Wenn ich richtig gezählt habe sind da sogar insgesamt 5 if-Abfragen drin...
Da kommen so Sachen wie:
Code: Alles auswählen
let LASTMONTH=$(date +%m)-1
Georg
RTFM, LMGTFY, Orakel... Ach... Warum muss man suchen...
Schrödingers Backup --- "Der Zustand eines Backups ist unbekannt, solange man es nicht wiederherstellt" --- Quelle: Nixcraft
RTFM, LMGTFY, Orakel... Ach... Warum muss man suchen...
Schrödingers Backup --- "Der Zustand eines Backups ist unbekannt, solange man es nicht wiederherstellt" --- Quelle: Nixcraft
Re: Bash Backupscript
Code: Alles auswählen
#!/bin/bash
parentdir=/root/parent #Wozu wird die Variable neu Definiert?
date=$(date "+%d-%m-%Y") #Wozu wird die Variable neu Definiert?
LMFILESEXIST=0
let LASTMONTH=$(date +%m)-1 #Was macht "let"?
DIRECTORIES=$(find $parentdir/system/ -type d ! -iname '.' -printf '%Tm\n') #Könnte mir das hier auch jemand erklären?
for DIRECTORY in $DIRECTORIES
do
if [ $DIRECTORY -eq $LASTMONTH ]; then
LMFILESEXIST=1
fi
done
if [ $LMFILESEXIST == 1 ]; then
cd $parentdir/system/
DIRS=$(find . -type d ! -iname '.' -printf '%p\n')
if tar -cWf $parentdir/archive/logarchive-$LASTMONTH-$date.tar $DIRS
then
if bzip2 $parentdir/archive/logarchive-$LASTMONTH-$date.tar ; then
if rm -rf $DIRS ; then
echo "Archiv $parentdir/archive/logarchive-$LASTMONTH-$date.tar.bz2 wurde erstellt und Originaldateien aus Monat $LASTMONTH geloescht" #Das ganze läuft als Autostart unter Gnome, also ohne sichtbare Konsole.
fi
fi
fi
fi
Re: Bash Backupscript
JonasE hat geschrieben:Hallo,
danke für eure Antworten.
Ich hatte die Idee, wie oben schon gesagt, das jeden neu Angefangenen Monat alle anderen Verzeichnisse in z.B. "$HOME/.backup" zu schieben. Wenn das mit "if" zu realisieren wäre, würde ich das sehr gut finden.
Also:Code: Alles auswählen
if $date = #(new month?) then .....
Code: Alles auswählen
$ if [[ $(date +%d) -eq 01 ]] ; then echo "do it, but replace echo with the tar command" ; fi
Anstelle des "echo" zB:
Code: Alles auswählen
mkdir name_of_backup
mv *file_names name_of_backup
tar -czf name_of_backup.tar.gz name_of_backup
rm -r name_of backup
Re: Bash Backupscript
Also. Das was Du in meinem ersten Posting siehst ist ein komplett lauffähiges Script, dass Eigenständig läuft. Ich musste die Variablen darin definieren, weil ich Dein Script nicht angepasst habe, da es bei mir vermutlich eh nicht laufen würde. In Dein Script solltest Du dir also nur die noch nicht gesetzten Variablen einbauen.JonasE hat geschrieben:Tut mir leid, das ich so viele Fragen habe, aber ich bin nicht ganz so Fitt auf dem Gebiet.Code: Alles auswählen
parentdir=/root/parent #Wozu wird die Variable neu Definiert? date=$(date "+%d-%m-%Y") #Wozu wird die Variable neu Definiert? let LASTMONTH=$(date +%m)-1 #Was macht "let"? DIRECTORIES=$(find $parentdir/system/ -type d ! -iname '.' -printf '%Tm\n') #Könnte mir das hier auch jemand erklären? echo "Archiv $parentdir/archive/logarchive-$LASTMONTH-$date.tar.bz2 wurde erstellt und Originaldateien aus Monat $LASTMONTH geloescht" #Das ganze läuft als Autostart unter Gnome, also ohne sichtbare Konsole.
"let" führt Aktionen aus. In diesem Fall eine Berechnung. $(date +%m) gibt den aktuellen Monat aus (Jetzt 11), davon wird 1 abgezogen (-1). LASTMONTH würde also im November mit dem Wert 10 gefüllt.
DIRECTORIES. In Deinem Ordner $parentdir/system/ soll mit find nach Ordnern gesucht werden (-type d) die im Namen nicht "." enthalten (-iname '.'). Von den gefundenen Ordnern soll nur der Monat ausgegeben werden (-print '%Tm\n').
Das echo hab ich als Beispiel eingebaut. Du solltest Dir vielleicht eine Log-Datei einbauen, in der Fehlermeldungen und normale Meldungen auflaufen, dann kann man auch nachvollziehen ob Dein Script lief.
Das kann man aber auch direkt beim Befehlsaufruf machen:
Code: Alles auswählen
/hier/ist/meinscript.sh 1>>LOGDATEI1 2>>ERRORLOG
Das find ich generell ne gute Idee, nur läuft das nicht, wenn der PC mal am 1. nicht eingeschaltet wird, da nur geprüft wird, ob heute der erste ist.Code: Alles auswählen
$ if [[ $(date +%d) -eq 01 ]] ; then echo "do it, but replace echo with the tar command" ; fi
Außerdem kann man mit den if-Abfragen relativ einfach rausfinden, ob der Befehl erfolgreich war, der gerade ausgeführt wurde. Erst dann wird rm ausgeführt:
Code: Alles auswählen
if tar -cWf $parentdir/archive/logarchive-$LASTMONTH-$date.tar $DIRS # Wenn tar erfolgreich war und die gepackten Dateien getestet wurden (Parameter W)....
then # Dann
if bzip2 $parentdir/archive/logarchive-$LASTMONTH-$date.tar ; then # Pack diese Datei zu ner bzip2 und wenn das erfolgreich war...
if rm -rf $DIRS ; then # dann lösche die Ursprungsordner und...
echo "Archiv $parentdir/archive/logarchive-$LASTMONTH-$date.tar.bz2 wurde erstellt und Originaldateien aus Monat $LASTMONTH geloescht" # gib mir ne Meldung, dass es geklappt hat
fi
fi
fi
Georg
RTFM, LMGTFY, Orakel... Ach... Warum muss man suchen...
Schrödingers Backup --- "Der Zustand eines Backups ist unbekannt, solange man es nicht wiederherstellt" --- Quelle: Nixcraft
RTFM, LMGTFY, Orakel... Ach... Warum muss man suchen...
Schrödingers Backup --- "Der Zustand eines Backups ist unbekannt, solange man es nicht wiederherstellt" --- Quelle: Nixcraft
Re: Bash Backupscript
Dass der Test über "date -%d = 01" nur "funktioniert" wenn der PC am Ersten eingeschaltet ist habe ich tatsächlich übersehen. Verdammich, aber vielen Dank für die Korrektur, bzw den Hinweis.
Re: Bash Backupscript
Nö. Dafür wird keiner Verdammt. Und: Nix zu danken. Ich mach bestimmt auch manche Sachen, die man besser machen kann!dawg hat geschrieben:... Verdammich, aber vielen Dank für die Korrektur, bzw den Hinweis.
Georg
RTFM, LMGTFY, Orakel... Ach... Warum muss man suchen...
Schrödingers Backup --- "Der Zustand eines Backups ist unbekannt, solange man es nicht wiederherstellt" --- Quelle: Nixcraft
RTFM, LMGTFY, Orakel... Ach... Warum muss man suchen...
Schrödingers Backup --- "Der Zustand eines Backups ist unbekannt, solange man es nicht wiederherstellt" --- Quelle: Nixcraft
Re: Bash Backupscript
Wow, danke an alle. Ich werde sofort mal die/den Script/Scripte ausprobieren.
Vielen Danke und Liebe Grüße
Jonas
Vielen Danke und Liebe Grüße
Jonas
Re: Bash Backupscript
Ich habe jetzt doch endlich eine eigene Lösung gefunden.
So ist es am einfachsten und ich habe nicht zu viele Datensätze.
Danke an alle, ganz besonders an gbotti und dawg.
LG
Jonas
Code: Alles auswählen
read bup < $datadir/bup
echo $bup
let bup++
echo $bup
echo $bup > $datadir/bup
if [ $bup -eq 50 ]
then
bup=1
mv -r $parentdir/login $bupdir/login/
mv -r $parentdir/pic $bupdir/pic/
mv -r $parentdir/system $bupdir/system/
fi
echo $bup > $datadir/bup
Danke an alle, ganz besonders an gbotti und dawg.
LG
Jonas