Schrift
[thread]8391[/thread]

Wachsenden Dateien folgen: tail -f (Seite 2)

Leser: 2


<< |< 1 2 3 4 >| >> 34 Einträge, 4 Seiten
esskar
 2006-10-06 13:25
#70522 #70522
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=Strat,06.10.2006, 10:42]oder ich wuerde mir mal die Implementierung von CPAN:File::Tail ansehen...[/quote]
hat er doch schon!
J-jayz-Z
 2006-10-06 13:57
#70523 #70523
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
Also meine Idee wäre mit Threads gewesen. Ein Thread schaut, ob die Prüfsumme der vorher geöffneten Datei (muss logischerweise gesichert werden), noch der Summe der jetzigen entspricht. Wenn ja,muss nict gemact werden. Wenn nicht muss der Inhalt der Datei eben ausgegeben werden. Prinzipiell ist dieLogik ja nicht schwer, nur über die Umsetzung habe ich mir in Perl bisher nur wenig Gedanken gemacht - in Java hab ich das sogar schon programmiert ... :p
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

http://perl-tutor.de
sid burn
 2006-10-06 15:12
#70524 #70524
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Naja das Konzept finde ich aber eher schlecht, zum anderen ist das auch keine Lösung des Problems.

Das was daran schlecht ist, ist das du ja ständig eine komplette Datei einlesen musst und ständig eine hash Summe Berechnen musst. Dann kannst du ja gleich auch die Schleife mit 100ms Verzögerung laufen lassen, und denke das wird sogar noch weniger Prozessor Zeit kosten.

Vor allem bei Dateien die schon Recht groß sind, kostet das unheimlich viel Performance.

Und das problem wird deswegen nicht gelöst, da es mir ja darum geht sozusagen eine benachrichtigung zu bekommen, wenn neue Daten auf dem Filehandle kommen, und dann weiter zu lesen.

Du musst bei der Methode ja immer noch in zeiltichen Abständen Manuell das Hashen starten, und "verschwendest" CPU Ressourcen. Vor allem bei großen Dateien kann das Hashen auch länger dauern.

Deine Lösung mit dem Hash löst ja nur die Problemematik um überhaupt festzustellen, ob sich die Datei geändert hat. Darum geht es ein für sich ja gar nicht.


Bisher scheint es wirklich keine Möglichkeit zu geben, und man muss dnotify, inotify oder andere Kernel Schnittstellen von BSD, Windows etc. ansprechen, damit man solch eine meldung bekommt.


Aber ansonsten nochmal Danke an alle. Werde mal schauen ob ich dann etwas mit inotify mache.\n\n

<!--EDIT|sid burn|1160133267-->
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
J-jayz-Z
 2006-10-06 15:26
#70525 #70525
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
Guggst du evtl mal hier
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

http://perl-tutor.de
ptk
 2006-10-07 02:23
#70526 #70526
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=J-jayz-Z,06.10.2006, 13:26]Guggst du evtl mal hier[/quote]
Der interessante Code steht hier: http://www.pell.portland.or.us/~orc....rward.c
Aber auch hier wird nur sleep(1) verwendet. Den moderneren FreeBSD-Code findet man hier: http://opengrok.creo.hu/dragonfly/xref/src/usr.bin/tail/forward.c
sid burn
 2006-10-07 03:07
#70527 #70527
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
[quote=ptk,07.Oct..2006, 00:23][quote=J-jayz-Z,06.10.2006, 13:26]Guggst du evtl mal hier[/quote]
Der interessante Code steht hier: http://www.pell.portland.or.us/~orc....rward.c
Aber auch hier wird nur sleep(1) verwendet. Den moderneren FreeBSD-Code findet man hier: http://opengrok.creo.hu/dragonfly/xref/src/usr.bin/tail/forward.c[/quote]
Sicher?
Ich habe zufällig ein OpenBSD Server und habe tail dort getestet. Und dort ist mir wirklich absolut 0 Verzögerung aufgefallen.

Allerdings konnte ich kein strace verwenden. Das gibt es nicht. Nach etwas Googeln habe ich gelesen ktrace wäre das pendant unter BSD, allerdings erstellt mir das eine Binäre Datei mit der ich nichts anfangen kann.

Habe das ganze aber jetzt nicht weiter verfolgt. OpenBSD ist auch nicht unbedingt mein Spezial Gebiet.

Ich denke aber mal das es wie bei FreeBSD auch eine Kernelschnittstelle abfragen wird.

Mit den C Code kann ich leider wenig anfangen. Zwar habe ich früher mal C gelernt. Aber schon so viele Jahre nichts mehr dadrin gemacht, vieles vergessen, und alle Standard Bibliotheken und was Sie machen, habe ich auch nie gelernt.
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
ptk
 2006-10-07 03:11
#70528 #70528
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=sid burn,07.10.2006, 01:07][quote=ptk,07.Oct..2006, 00:23][quote=J-jayz-Z,06.10.2006, 13:26]Guggst du evtl mal hier[/quote]
Der interessante Code steht hier: http://www.pell.portland.or.us/~orc....rward.c
Aber auch hier wird nur sleep(1) verwendet. Den moderneren FreeBSD-Code findet man hier: http://opengrok.creo.hu/dragonfly/xref/src/usr.bin/tail/forward.c[/quote]
Sicher?
Ich habe zufällig ein OpenBSD Server und habe tail dort getestet. Und dort ist mir wirklich absolut 0 Verzögerung aufgefallen.
[/quote]Der Code schaut danach aus.
Quote
Allerdings konnte ich kein strace verwenden. Das gibt es nicht.
strace gibt es als Port, zumindest bei FreeBSD.
Quote
Nach etwas Googeln habe ich gelesen ktrace wäre das pendant unter BSD, allerdings erstellt mir das eine Binäre Datei mit der ich nichts anfangen kann.
Du musst diese Datei mit kdump anschauen. Ansonsten könnte noch truss im System sein.
Quote
Ich denke aber mal das es wie bei FreeBSD auch eine Kernelschnittstelle abfragen wird.
Ich schätze OpenBSD als das konservativste BSD-System ein. Da gibt es so ein neumodisches Zeug wie kevent nicht :-)
sid burn
 2006-10-07 04:17
#70529 #70529
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Okay.
Gemacht getant.

OpenBSD tail Funktioniert anscheind ebenfalls nicht in einer Schleife. wenn ich ktrace laufen lasse dann wird eine ca 34kb große Datei ktrace.out erstellt.

Diese wächst aber auch nicht mehr weiter. Wäre es eine Schleife, mit 1 Sek abstand müsste die Datei ja jede Sekunde wachsen, was es allerdings nicht macht.

Ich habe einmal ein Dump nach normalen starten erstellt, und dann nochmal ein Dump und dann dann die Datei mit "echo -n "foobar" >> datei" erweitert. Das was lediglich hinzu kommt ist folgendes:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
>  13024 tail     RET   kevent 1
> 13024 tail CALL read(0x3,0x8750a000,0x4000)
> 13024 tail GIO fd 3 read 6 bytes
> "foobar"
> 13024 tail RET read 6
> 13024 tail CALL read(0x3,0x8750a000,0x4000)
> 13024 tail RET read 0
> 13024 tail CALL write(0x1,0x83b2f000,0x6)
> 13024 tail GIO fd 1 wrote 6 bytes
> "foobar"
> 13024 tail RET write 6
> 13024 tail CALL kevent(0x4,0,0,0xcfbf1b70,0x1,0)
> 13024 tail PSIG SIGINT SIG_DFL code 0


So wie es also ausschaut enthält es auch einfach wieder ein Event vom Kernel, liest danach den Dateihandle weiter aus, und gibt es einfach aus.

Also ohne Schnittstelle zum Kernel, rein auf Filehandle ebene, ist das ganze anscheind nicht lösbar.

Quote
Ich schätze OpenBSD als das konservativste BSD-System ein. Da gibt es so ein neumodisches Zeug wie kevent nicht :-)

Naja kevent scheint es ja zu geben. ;)
Code: (dl )
1
2
$ uname -a
OpenBSD xxx 3.8 GENERIC#138 i386


Ansonsten halte ich jedes BSD für Konservativ. Kein System V. Nur ein Startskript. ;)

OpenBSD gefällt mir wegen seiner Sicherheit. Das verdient echt Respekt was die Leute da auf die Beine stellen.

Allerdings kann ich mich irgendwie nicht soo mit den BSDs anfreunden. Ich finde dort Linux Moderner. Allerdings kommt einen Linux auch schon fast wie die Spielwiese zu den Unix, BSDs vor.

Irgendwie ein echtes Dilemma. ;)

Ich sollte mal Debian KFreeBSD ausprobieren, oder noch besser Debian GNU/Hurd. :D\n\n

<!--EDIT|sid burn|1160181189-->
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
betterworld
 2006-10-07 04:29
#70530 #70530
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
[quote=ptk,07.10.2006, 01:11]strace gibt es als Port, zumindest bei FreeBSD.[/quote]
strace funktioniert meiner Erfahrung nach aber sehr schlecht auf FreeBSD. Aber dafuer kann man unter top sehen, auf welchen System-Call ein Programm gerade wartet, z. B. sleep oder select, das koennte auch hilfreich sein.
betterworld
 2006-10-07 04:33
#70531 #70531
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
[quote=sid burn,07.10.2006, 02:17]Ansonsten halte ich jedes BSD für Konservativ. Kein System V. Nur ein Startskript. ;)[/quote]
Das stimmt ja gar nicht. FreeBSD hat einen ganzen Haufen Startskripte unter /etc/rc.d.
<< |< 1 2 3 4 >| >> 34 Einträge, 4 Seiten



View all threads created 2006-10-06 00:49.