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

[gelöst] Ausgaben in stderr von fremden Prog.?

Hallo,

ich suche schon seit ein paar Tagen im Web und hier nun auch nach einer Möglichkeit Zugriff auf stder zu bekommen.
Mein Prorgamm wird via script beim Boot up gestartet, mit einem angehangenem "&" um den prozess abzuspalten.
Das Programm erzeugt Ausgaben an stderr die wenn ich es manuell aufrufe ja in der Konsole (stdout)landen.

Nun möchte ich mich über telent anmelden und aktuelle Mitteilungen (oder vielleicht im begrenzten Maße Ältere) mitlesen können.

Meine idee wäre etwas wie den syslogdaemon zu nutzen der ein logfile schreibt, dass "roundrobin" rotieren sollte, udn das ich dazu bringen neuen seinen Inhalt mir in meine neue Konsole zu schreiben.

Hat jemand eine Idee was ich dazu brauche oder machen muss?

Denn der stderr gilt ja nur für ein Konsole und nicht systemweit, oder irre ich mich. Jedenfalls haben unterschiedliche telnet Fenster auch unterschiedliche stderr ausgaben, und nicht die Summe aus allen.
Hintergund ist das mehrere server applikationen an stderr daten schreiben und ich mir diese dann ansehen möchte wenn ich mich anmelde.

Syslog direkt zu nutzen finde ich nicht so toll, weil der schon sowieso überladen ist und weil ich mir das Suchen nach meinen Ausgaben ersparen will.

Gruss Haribo(chen)

PS: Leider hatet schon jemand den Namen "Haribo".
 
A

Anonymous

Gast
Meine erste Idee währe mit mknod eine NamedPipe zu erstellen und ein Hintergrundprozess zu starten der weiter nichts macht, als mit cat aus dieser NamedPipe lesen und alles in eine Logdatei zu schreiben.
Danach erst starten du deine Programme und all deine stderr aus den Applikationen mittels Umleitungszeichen in die NamedPipe umlenken.

Kann das jetzt nicht ausprobieren. Frage wird sein:
1. wie begrenzt man die Größe der Logdatei?
Irgendwie müsste man dort noch eine Rotatefunktion einbauen.
2. was passiert wenn einer der Prozesse die den Fehlerkanal in die Pipe senden, sich beenden?
Eventuell wird sich dabei cat beenden da es dabei eventuell einen EOF sieht. Und somit die anderen Prozesse wahrscheinlich auch noch anhalten da sie die Fehlerausgaben dann nicht mehr in die Pipe senden können. Cat müsste in diesem Fall wohl permanent in einer Endlosschleife nachgestartet werden sobald es ein EOF gibt.

robi
 
Ja das klingt schon mal interessant, wobei ich jetzt schon fast glaube nen eigen daemon als servber prozess aufzusetzen wäre fast leichter. damit kenn ich mich besser aus als mit der hohen Künsten der Shellprogrammierung.

Aber ich schaue mir mal das mit den named pipes und schaue mal in den syslog-ng sourcecode um mir die rotierfunktion zu "klauen".

Danke, nun weiss ich schon mal das es nicht so einfach geht.

Gruss Haribo
 
Hallo!

Vielleicht verstehe ich die ganze Sache ja falsch, aber mir scheint das ganz einfach zu sein:
Code:
programmaufruf& 2>logdatei
2 ist der Fehlerkanal, und der wird in eine Datei umgelenkt.
Rotatefunktion usw. wäre dann ein anderes Thema.

Gruß
Olaf
 
A

Anonymous

Gast
bolder schrieb:
Vielleicht verstehe ich die ganze Sache ja falsch, aber mir scheint das ganz einfach zu sein:
Code:
programmaufruf& 2>logdatei
2 ist der Fehlerkanal, und der wird in eine Datei umgelenkt.
Das geht von einem Prozess aus auch prima, wird der Prozess erneut mit den selben Optionen gestartet wird die Datei neu angelegt, die alten Logs also schonmal weg.
haribochen schrieb:
Hintergund ist das mehrere server applikationen an stderr daten schreiben und ich mir diese dann ansehen möchte wenn ich mich anmelde.
Da nützt es so mit einfacher Umleitung überhaupt nichts, selbst ein "2>>" als Umleitung aller Fehlerkanäle auf ein und die selbe Logdatei würde da wahrscheinlich Probleme bereiten, weil damit zB eine Rotation der Logdatei nicht möglich ist und diese Logdatei selbst nach dem Löschen derselben ins Unermeßliche weiter anwachsen würde solange bis alle Applikationen neu gestartet wurden.

Durch die Umleitung über die NamedPipe wie ich es vorgeschlagen habe, werden die Applikationsprozesse von der Logdatei logisch entkoppelt, so das der Prozess der die Logdatei schreibt und bei der Rotation der Logdatei neu gestartet werden müsste, unabhängig von den Applikationen läuft. Damit können auch die Applikationen jederzeit einzeln problemlos angehalten und gestartet werden ohne das der Logprozess dabei beeinflusst wird.

robi
 
Oben