• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[solved] Erstellen einer LogDatei?

Seppi

Newbie
Hi @ all!!!

Ich habe gerade angefangen mit Linux zu arbeiten und deshalb auch noch nicht gerade viele Kenntnisse. Nun möchte eine LogDatei erstellen, die folgende Kriterien erfüllt:

:arrow: protokollieren aller eingeloggten user
:arrow: LogDatei alle 5 Sekunden aktualisieren
:arrow: Anhand des Dateinamens soll das Tagesdatum erkennbar sein, so dass die Informationen später leicht zu finden sind.
:arrow: Jeden Tag soll die Datei in einem Backup-Verzeichnis gesichert werden (das Original ist zu löschen).
:arrow: Jeden Monat werden die gesicherten Log-Dateien in ein Archiv gepackt, komprimiert und aus dem Backup-Verzeichnis gelöscht (zur Einsparung von Festplattenspeicherplatz, da die Log-Dateien recht groß werden können). Auch hier ist das Monatsdatum Bestandteil des Dateinamens.
:arrow: Die Protokollierung soll automatisch beim Systemstart begonnen werden.

Kann mir jemand helfen? :? :oops: :D
Ich will nicht unhöflich sein aber ich brauche die Hilfe dringend, da ich die Datei morgen am Start haben muss.

Ein kleines bischen weiß ich ja (die Auflistung mit w, die 5 Sek verzögerung mit sleep 5) aber ich weiß nicht wie und ob ich das ganze wie bei Java oder C(++) in eine Schleife packen kann, geschweige denn ob das überhaupt eine gute Idee ist!?

Also, jede Hilfe ist mir sehr willkommen und ich danke euch schon im vorraus!!!

MfG Seppi!!!
 
A

Anonymous

Gast
Alles unnötig... da dies bereits protokolliert wird und zwar in der Datei /var/log/wtmp

das ist eine binärdatei, die du mit

who /var/log/wtmp anschauen kannst.

Zum Thema Backups der Logfiles, diese löschen usw gibt es das Programm logrotate, welches mit 99% Wahrscheinlichkeit bereits bei dir läuft, bzw für das es einen cron job in /etc/cron.daily/ gibt.

Um die Standardeinstellungen zu ändern musst du die Datei /etc/logrotate.conf
editiren.

z. B. steht bei mir für wtmp drin
Code:
/var/log/wtmp {
    monthly
    create 0664 root root
    rotate 1
}
[\code]
das bedeutet quasi, dass die Datei bei mir einmal im Monat gesichert + kompremiert wird und es maximal eine backupdatei gibt, findet eine neue Sicherung statt, wird die alte Backupdatei gelöscht.

So wie du das haben willst schauts in etwa so aus:

[code]
/var/log/wtmp {
    daily
    create 0664 root root
    rotate 30
    olddir /var/log/wtmpbackup
}

Das mit dem Datum im Dateinamen ist meiner Meinung nach überflüssig, da du ja mit:


Code:
who /var/log/wtmp | grep DATUM

die user rauspicken kannst. Genauso bei den kompremierten log files:

Code:
gzip -cd /var/log/wtmpbackup/foo | who - | grep DATUM

mfg

Andy
 
OP
S

Seppi

Newbie
Wenn ich das so schreibe, wie du mir das geschildert hast...:

Code:
/var/log/wtmp { 
daily 
create 0664 root root 
rotate 30 
olddir /var/log/wtmpbackup 
}

...wird die die LogDatei doch nur 30 mal am Tag rotieren und nicht alle 5 Sekunden, wie ich das haben möchte! Oder ist das falsch?
 
A

Anonymous

Gast
Die Datei wird einmal pro tag rotiert und es werden 30 backup dateien gespeichert

Warum sollte man die log datei alle 5 Sekunden rotieren wollen?

mfg

Andy
 
OP
S

Seppi

Newbie
Die LogDatei soll alle 5 Sekunden eventuelle Veränderungen registrieren , d.h ob sich neue user angemeldet haben oder sich welche abgemeldet haben. Dazu soll anhand des Dateinamens das Tagesdatum erkennbar sein. Die Backup-Datei soll täglich gesichert werden und jeden Monat werden die LogDateien in ein Archiv gepackt und aus dem Backup-Verzeichnis gelöscht. Das Archiv soll den Monatsnamen als Dateinamen bekommen.

Es soll garnichts rotieren. Ich muss eine neue LogDatei erstellen, die nach den obigen Kriterien arbeitet!

:!: Ich muss nur wissen, wie ich eine LogDatei erstelle, die sich alle 5 Sekunden aktualisiert und den Befehl "w" ausführt :!:
 

moenk

Administrator
Teammitglied
Also eine "meindolleslog.sh" und sinngemäß sowas:
Code:
nochmal:
w >> /var/log/meindolleslog.txt
sleep 5
goto nochmal
Und dann Start mit "meindolleslog.sh &".
 
OP
S

Seppi

Newbie
Sollte meine Mail etwas patzig rübergekommen sein, entschuldige ich mich hiermit, das sollte sie nämlich eigentlich nicht!!! :oops:
 
OP
S

Seppi

Newbie
Danke, aber kannst du mir die Befehle dann gleich mal erklären?? Damit ich auch noch was dazu lerne?? Wäre lieb!
 
A

Anonymous

Gast
Ich frag mich zwar, was der Grund ist...

die Datei /var/log/wtmp wird sofort aktualisiert, wenn ein user sich einloggt...

w ließt nichts anderes aus als die datei /var/run/utmp (die Datei gehört zur glibc wie wtmp)

mir bleibt eigentlich nichts anderes überig als dir zu sagen, dass du dich mal mit dem logsystem von linux auseinandersetzen solltest...

mfg

Andy
 
OP
S

Seppi

Newbie
Sag das nicht mir, sag das lieber meinem intelligenten Lehrer. Der will das so wie ich es beschrieben habe von mir.
So wie du das sagst ist das scho logisch, nur leider muss ich mich an die Vorgaben halten.

MfG Seppi
 
A

Anonymous

Gast
Es gibt kein goto in der Bashprogrammierung

nur man nimmt goto häufig um Schleifen darzustellen, unabhängig von der Programmiersprache.

mfg

Andy
 
A

Anonymous

Gast
Wie lange hattest du eigentlich für diese Aufgabe Zeit, wenn man fragen darf :)

mfg

Andy
 
OP
S

Seppi

Newbie
Kannst du mir den sagen wie ich die bash:

#!/bin/bash

w >> /var/log/meindolleslog.txt
sleep 5

in eine Schleife bekomme? Wir hatten dieses Thema (Schleifen) noch nicht. moenk hat ja "goto nochmal" geschrieben, aber wie setzte ich das um?

MfG Seppi

P.s: Ich hatte eine Woche für die Aufgabe Zeit, bin aber erst heute auf diese Seite gekommen!
 
A

Anonymous

Gast
Code:
#!/bin/bash
while [ 1 ]; do
w >> /var/log/meindolleslog.txt
sleep 5
done

macht eine Endlosschleife, wobei w ständig in die Datei zu schreiben ziemlicher Schmarn ist, weil du dann doppelte Einträge hast, außerdem hast du durch w immer die Kopfzeile des w Kommandos in der log datei, was du ja sicher nicht willst?

Wenn ihr das wirklich mit w machen müsst und nicht mit who, dann musst du erst die oberste Zeile abschneiden und evtl vorher prüfen, ob sich überhaupt was an der w ausgabe geändert hat.

mfg

Andy
 
OP
S

Seppi

Newbie
Mit who säh das dan so aus?

Code:
#!/bin/bash 
while [ 1 ]; do 
who /var/log/meindolleslog.txt
sleep 5
done

Und so wäre das besser?

Sorry, dass ich so viele dumme Fragen stelle, aber ich habe gerade erst angefangen mit Linux zu arbeiten! :oops:

Wie würde den eine deiner Meinung nach bessere Lösung aussehen?

MfG Seppi
 
A

Anonymous

Gast
Zum Thema logfiles mit aktuellem Dateum abspeichern:

Code:
datum=`date +%d.%m.%Y`
w >>/var/log/wlog.$datum
mfg

Andy
 
A

Anonymous

Gast
In was für einem Fach habt ihr denn das Aufbekommen, wenn du noch nie was mit Linux gemacht hast?

mfg

Andy
 
Oben