Archivierung Log Dateien

Dieses Thema im Forum "Programmieren allgemein" wurde erstellt von Noobi, 26.05.2009.

  1. Noobi

    Noobi Jungspund

    Dabei seit:
    26.05.2009
    Beiträge:
    11
    Zustimmungen:
    0
    Hi,
    ich brauch eure Hilfe.

    Aufgabe:

    Einen Job schreiben der Dateien aus dem jeweils angegebenem Verzeichnis in eine komprimierte Achivdatei (tar, gezippt) verschiebt

    Er soll die Dateien im Verzeichnis berücksichtigen die bis zur letzten vollen Stunde erstellt wurden

    Die Archivdatei soll in das angegebene Archivverzeichnis verschoben werden

    Der Name der Archivdatei soll aus Dautm und Zeitstempel plus Endung gem. nachfolgendem Format aufgebaut sein. Als Zeitstempel soll die letzte volle Stunde verwendet werden.
    JJJMMTT_HHMMSSS.Endung

    Bsp:

    Quellverzeichnis mit Logdateien:

    ........./logs

    Zielverzeichnis mit Archivdateien:

    ......../logs_archiv




    Ich hoffe ihr könnt mir weiterhelfen.

    Viele Dank im Vorraus
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 HeadCrash, 26.05.2009
    HeadCrash

    HeadCrash Routinier

    Dabei seit:
    16.05.2009
    Beiträge:
    482
    Zustimmungen:
    1
    Ort:
    Bayern
    Hallo,

    spontan würde ich sagen logrotate ist dein freund, der werkelt aber glaube ich mit täglich als kleinstem Zeitraum und versteht darunter wirklich das er die Logs einmal am Tag rotiert.

    So wirst du dir etwas im Sinne von
    Code:
    find /pfad/zu/den/logs -mtime 1 -exec script_zum_zipen_verschieben '{}' \;
    
    einfallen lassen müssen, mit dem "-mtime" bin ich mir grade nicht ganz sicher.

    Und das ganze Stündlich als Cron laufen lassen müssen.
     
  4. Noobi

    Noobi Jungspund

    Dabei seit:
    26.05.2009
    Beiträge:
    11
    Zustimmungen:
    0
    Ich dachte eher an ein kleines skript das erst alle Dateien rausfiltert die in der letzten vollen stunde erstellt wurden (vllt irgendwie mit ls -ltr....??) und dann die dateien archiviert zipt und mit richtigem namen in das archivverzeichnis schiebt.
     
  5. #4 HeadCrash, 26.05.2009
    HeadCrash

    HeadCrash Routinier

    Dabei seit:
    16.05.2009
    Beiträge:
    482
    Zustimmungen:
    1
    Ort:
    Bayern
    das sollte das find-Kommando erledigen oder willst du ernsthaft die Ausgabe von ls parsen?

    Den Teil hab ich dem "script_zum_zipen_verschieben" zugedacht, welches als Parameter die zubearbeitende Datei übergeben bekommt.

    Nebenbei noch ne kleine Verständnisfrage meinerseits.
    Die Applikation welche die Logfiles erzeugt fängt auch jede Stunde ein neues an?

    Und es ist als Aufrufparameter von find "-mtime +1" für alles an Dateien, die vor einer Stunde modifiziert wurden. Falls du Angst hast das die Zipper- und Kopiererrei zu lange dauert, kannst du ja auch erst eine Liste der zu archivierenden Dateien erzeugen und diese dann abarbeiten.
     
  6. Noobi

    Noobi Jungspund

    Dabei seit:
    26.05.2009
    Beiträge:
    11
    Zustimmungen:
    0
    ok dann ist das ja in ordnung mit dem find.

    Die Logdateien werden in unregelmäßigen Intervallen weggeschrieben, machmal keine und machmal viele in einer Stunde.

    Das Parameter "-mtime +1" ist das sicher für die letzte Stunde??
    Und wie bekomme ich die Benennung der Archivdateien mit dem Zeitstempel etc hin?

    Vielen Dank
     
  7. #6 HeadCrash, 26.05.2009
    HeadCrash

    HeadCrash Routinier

    Dabei seit:
    16.05.2009
    Beiträge:
    482
    Zustimmungen:
    1
    Ort:
    Bayern
    "-mtime +1" sollte alles finden was älter als eine Stunde ist.
    Ältere Dateien dürften ja eigentlich nicht vorhanden sein, da sie jede Stunde weggezippt werden.

    Über eine formatierungs Optionen für den Befehl "date" (man date für mehr Infos) -> date +%Y%m%d_%H%M%S
    und dann entsprechen beim Verschieben an den Dateinamen gehängt
     
  8. Noobi

    Noobi Jungspund

    Dabei seit:
    26.05.2009
    Beiträge:
    11
    Zustimmungen:
    0
    ok aber jetzt würde er ja alle dateien nehmen die in der letztesn stunde erstellt wurden aber der job soll ja die Dateien im Verzeichnis berücksichtigen die bis zur letzten vollen Stunde erstellt wurden.
    Das skript soll später um 01.15, 09.15, 12.15, 15.15, 18.15, 21.15 und 23.15 durchlaufen.
     
  9. #8 floyd62, 27.05.2009
    Zuletzt bearbeitet: 27.05.2009
    floyd62

    floyd62 Routinier

    Dabei seit:
    01.05.2007
    Beiträge:
    309
    Zustimmungen:
    0
    Hi,

    so als Schnellschuss (ungetestet) könnte das etwa wie folgt laufen:

    Code:
    #!/bin/sh
    
    LOGDIR=.../logs
    ARCHDIR=.../logs_arch
    
    
    TIMESTAMP=/tmp/TIMESTAMP.$$
    
    cleanup() { rm -f $TIMESTAMP; }
    trap cleanup 0
    
    
    DAY=$(date '+%Y-%m-%d')
    HOUR=$(date '+%H:00:00')
    
    touch -d "$DAY $HOUR" $TIMESTAMP
    # ls -l $TIMESTAMP
    
    LOGS=$(cd $LOGDIR 2>/dev/null && find . ! -newer $TIMESTAMP -print)
    [ "$LOGS" ] || { echo "Nothing to do."; exit 0; }
    
    ARCH="${DAY}_${HOUR}.tgz"
    # echo $ARCH
    
    ( cd $LOGDIR; tar --remove-files -cvzf "$ARCH" $LOGS )
    
    exit 0
    
    Du erzeugst also zunächst einmal eine TIMESTAMP Datei mit einem Pseudo-Erstellungsdatum von der letzten vollen Stunde (und sorgst mit der cleanup-Funktion dafür, dass die nicht bis in alle Ewigkeit stehenbleibt), checkst dann im Log-Verzeichnis ab, ob irgendwelche Dateien zu archivieren sind (d.h. ob es Dateien gibt, die älter sind als das eben angelegte TIMESTAMP File), und überlässt es ggf. "tar", die Dateien zu archivieren und im Erfolgsfall zu löschen ...

    (Den "find" kannst du ggf. noch mit den maxdepth- oder prune- Optionen einschränken, damit der nicht in irgendwelche Unterverzeichnisse reinläuft, wenn das nicht gewünscht sein sollte.)

    Grüsse,
    A.

    (Und nur am Rande, auf meiner Linux-Kiste liefert "-mtime +1" alle Dateien, die in den letzten 24 Stunden nicht modifiziert wurden; "-mmin 60" würde Dateien listen, die älter als eine Stunde sind, aber wenn du gegen die volle Stunde prüfen willst, dürfte das Timestamp-File die einfachste Lösung sein, wenn du nicht mit "find ... -mmin +$(date '%m')" oder so etwas rumspielen willst ...)
     
  10. #9 HeadCrash, 27.05.2009
    HeadCrash

    HeadCrash Routinier

    Dabei seit:
    16.05.2009
    Beiträge:
    482
    Zustimmungen:
    1
    Ort:
    Bayern
    Moin,

    Okay mit dem "-mtime" lag ich wohl daneben.
    Was mich nur grade ein bisschen verwundert ist:
    Code:
    # findet nichts
    erich@atlantis:~/scriptEcke/tmp$ find /home/erich/scriptEcke/tmp/ -mmin 60 -exec ls -l '{}' \;
    # findet sie, nur warum doppelt?
    erich@atlantis:~/scriptEcke/tmp$ find /home/erich/scriptEcke/tmp/ -mmin +60 -exec ls -l '{}' \;
    insgesamt 12
    -rw-r--r-- 1 erich erich 30 26. Mai 15:05 1.log
    -rw-r--r-- 1 erich erich 30 26. Mai 15:06 2.log
    -rw-r--r-- 1 erich erich 30 26. Mai 15:07 3.log
    -rw-r--r-- 1 erich erich 30 26. Mai 15:05 /home/erich/scriptEcke/tmp/1.log
    -rw-r--r-- 1 erich erich 30 26. Mai 15:06 /home/erich/scriptEcke/tmp/2.log
    -rw-r--r-- 1 erich erich 30 26. Mai 15:07 /home/erich/scriptEcke/tmp/3.log
    
    # mit mtime finde ich gar nichts 
    erich@atlantis:~/scriptEcke/tmp$ find /home/erich/scriptEcke/tmp/ -mtime 1 -exec ls -l '{}' \;
    erich@atlantis:~/scriptEcke/tmp$ find /home/erich/scriptEcke/tmp/ -mtime +1 -exec ls -l '{}' \;
    
    mfg
    HeadCrash
     
  11. Noobi

    Noobi Jungspund

    Dabei seit:
    26.05.2009
    Beiträge:
    11
    Zustimmungen:
    0
    Hallo,
    ich bin gerade in einer Schulung, werde das nacher gleich einmal ausprobieren.
    Ich hoff das es klappt. Sieht gut aus.
    Vielen Dank
     
  12. #11 floyd62, 27.05.2009
    Zuletzt bearbeitet: 27.05.2009
    floyd62

    floyd62 Routinier

    Dabei seit:
    01.05.2007
    Beiträge:
    309
    Zustimmungen:
    0
    Hi HeadCrash,

    denke, der "find"-Befehl listet die Dinger zweimal, weil er zum einen die Dateien selbst findet (dann mit vollem Pfad), zum anderen aber stellt er fest, dass das Verzeichnis selbst auch matcht, und wenn er dann einen "ls -l" darauf ausführt, siehst du den Inhalt (dann mit Kurznamen) statt des Directories selbst. Meine Empfehlung daher: bei "find" statt "-exec ls -l {} \;" immer "-exec ls -ld {} \;".

    Und "-mmin 60" sollte nur die Dateien liefern, die (ziemlich) genau vor 60 Minuten, nicht vorher und nicht nachher geändert wurden ... das dürften meistens nur ziemlich wenige sein ;-)

    Deine Logs wurden scheinbar alle gestern nachmittag erzeugt, sind also noch keine 24 Stunden alt. Daher liefert weder "-mtime 1" noch "-mtime +1" was zurück. Schon mal mit "-mtime 0" oder "-mtime -1" probiert?

    @Noobi:

    wenn du das Skript oben ausprobieren willst, solltest du natürlich dann beim find-Befehl auch z.B. mit "-type f" sicherstellen, dass da nicht irrtümlich zuviel (Verzeichnisse) erwischt wird.

    Grüsse
     
  13. #12 HeadCrash, 27.05.2009
    Zuletzt bearbeitet: 27.05.2009
    HeadCrash

    HeadCrash Routinier

    Dabei seit:
    16.05.2009
    Beiträge:
    482
    Zustimmungen:
    1
    Ort:
    Bayern
    Argh, stimmt ist die Auflistung für das Verzeichnis ... danke, wieder was gelernt.

    Letzt endlich find ich deinen Ansatz aber richtiger als meinen. Und das "touch -d" werd ich mir auch mal merken.

    Nur wieso das "-time +1" nichts findet versteh ich immer noch nicht ganz

    ===Edit===
    man time
    ...
    -mtime N
    der Inhalt der Datei wurde vor N*24 Stunden verändert
    ...

    wer lesen kann ...
    ===/Edit===

    mfg
    HeadCrash

    PS: Das "-mmin 60" ging auf deinen Post zurück
     
  14. #13 floyd62, 27.05.2009
    floyd62

    floyd62 Routinier

    Dabei seit:
    01.05.2007
    Beiträge:
    309
    Zustimmungen:
    0
    Sorry, das "-mmin 60" war da ein Typo; ich denke manchmal schneller, als ich tippe ... oder auch umgekehrt ...

    A.
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. Noobi

    Noobi Jungspund

    Dabei seit:
    26.05.2009
    Beiträge:
    11
    Zustimmungen:
    0
    Archiveskript.sh: syntax error at line 11: `DAY=$' unexpected

    die Fehlermeldung kommt wenn ich das Skript ausführen will.

    #!/bin/sh

    LOGDIR=/home/robin/skript/logs
    ARCHDIR=/home/robin/skript/logs_archive

    TIMESTAMP=/tmp/TIMESTAMP.$$

    cleanup() { rm -f $TIMESTAMP; }
    trap cleanup 0

    DAY=$(date '+%Y-%m-%d')
    HOUR=$(date '+%H:00:00')

    touch -d "$DAY $HOUR" $TIMESTAMP
    # ls -l $TIMESTAMP

    LOGS=$(cd $LOGDIR 2>/dev/null && find . ! -newer $TIMESTAMP -print)
    [ "$LOGS" ] || { echo "Nothing to do. "; exit 0; }

    ARCH="{DAY}_${HOUR}.tar"
    # echo $ARCH

    ( cd $LOGDIR; tar --remove-files -cvzf "$ARCH" $LOGS )

    exit 0
     
  17. #15 floyd62, 29.05.2009
    floyd62

    floyd62 Routinier

    Dabei seit:
    01.05.2007
    Beiträge:
    309
    Zustimmungen:
    0
    Welches Betriebssystem und welche Shell verwendest du?

    A.
     
Thema:

Archivierung Log Dateien

Die Seite wird geladen...

Archivierung Log Dateien - Ähnliche Themen

  1. Online-Umfrage zum Thema betriebliche Email-Archivierung

    Online-Umfrage zum Thema betriebliche Email-Archivierung: Im Rahmen meiner Abschlussarbeit im Studiengang Multimedia-Development führe ich derzeit eine Untersuchung zum Kenntnis- und Umsetzungsstand der...
  2. rar - Warten, wenn eine andere Archivierung aktiv ist

    rar - Warten, wenn eine andere Archivierung aktiv ist: Hallo, eigentlich sagt meine Überschrift schon das wesentlichste aus. Ich habe auf meinem Server das Programm "rar" installiert. Das...
  3. Archivierungsprogramm

    Archivierungsprogramm: Hallo Leute, bin neu hier und bin auch neuling in sachen shell skripte. Wir müssen für die Schule ein Shell script schreiben welches die...
  4. Linux Email-Management Archivierung DMS

    Linux Email-Management Archivierung DMS: Wir sind auf der Suche nach einem Dokumentenmanagement-System fuer Linux welches sich mit dem in der Windows-Welt verbreiteten ELOoffice...
  5. Optimales Dateisystem für Archivierung

    Optimales Dateisystem für Archivierung: Hallo, ich möchte zur Speicherung meiner mp3 und Videosammlung ein optimales Dateisystem finden. Grundsätzlich gehe ich davon aus dass ext3 am...