bash - umeitungen in /dev

Debian macht sich hervorragend als Web- und Mailserver. Schau auch in den " Tipps und Tricks"-Bereich.
Antworten
Tago
Beiträge: 78
Registriert: 10.11.2002 15:13:58

bash - umeitungen in /dev

Beitrag von Tago » 15.01.2003 19:59:28

Hi,

Wenn ich über die bash z.B. einen Server starte wie chatserver, dann habe ich die Ausgabe auf der bash, d.h. ich kann dort nicht mehr arbeiten.
So wenn ich jetzt richtig liege dann kann ich z.B. mit

Code: Alles auswählen

chatserver | /dev/null
das Ganze ins Nirvana leiten, aber ich komme dann ja nie wieder in die Ausgabe um ihn z.B. zu beenden.

Wie kann man soetwas also umeiten, wo man später auch wieder drauf zugreifen kann ?

Tago

Benutzeravatar
Frankenstein
Beiträge: 145
Registriert: 28.01.2002 14:51:14
Lizenz eigener Beiträge: GNU Free Documentation License
Kontaktdaten:

Beitrag von Frankenstein » 15.01.2003 20:42:28

z.B.:

Code: Alles auswählen

chatserver &
starten und das Programm in Hinergrund schieken und

Code: Alles auswählen

kill PID
zu benden

Benutzeravatar
schoppi
Beiträge: 279
Registriert: 01.11.2002 10:43:43
Kontaktdaten:

Beitrag von schoppi » 15.01.2003 20:47:33

Das klappt nicht ganz. Also ein paar Grundlagen:

Das Pipezeichen '|' bewirkt, daß alles, was auf STDOUT der auf der linken Seite stehenden Befehl(-skette) geschrieben wird, an STDIN der auf der rechten Seite stehenden *Befehle* geleitet wird.

Das >-Zeichen ist einfach nur eine Ausgabeumleitung und schreibt alles, was von den Befehlen auf der Linken Seite kommt in die *Datei*, die auf der rechten Seite steht.

Also:

Code: Alles auswählen

chatserver > /dev/null
bedeutet: leite die Ausgabe von 'chatserver' (STDOUT) in die *Datei* /dev/null um. Sollte 'chatserver' jedoch Meldungen nach STDERR ausgeben, erscheinen diese trotzdem auf der Console.

Deshalb besser:

Code: Alles auswählen

chatserver >/dev/null 2>&1
Das bedeutet: Leite die Ausgabe von 'chatserver' (STDOUT) in die *Datei* /dev/null und leite die "Fehlermeldungen" (STDERR) ebenfalls dorthin wo STDOUT hingeht. In diesem Fall /dev/null.

Wenn du jedoch die Ausgaben des Servers mitloggen willst, solltest du ganz einfach:

Code: Alles auswählen

chatserver > /var/log/chatserver.log
bedeutet: erstelle die Datei /var/log/chatserver.log und leite die Ausgaben von chatserver dorhin um. Wichtig: existiert bereits eine Datei mit dem Namen wird diese überschrieben.
Um an eine bestehende Datei anzuhängen nimmt man '>>' Damit wird an eine bestehende Datei angehängt. Existiert keine Datei, wird auch keine erzeugt.

Bei all den verschiedenen "Versionen" belegt das Programm weiterhin die bash, d.h. es kann jederzeit mit STRG-C abgebrochen werden.
Um das Programm im Hintergrund zu starten wird ein '&' an die Befehlszeile angehängt. Dann kann man auch auf der Console normal weiterarbeiten.

Benutzeravatar
schoppi
Beiträge: 279
Registriert: 01.11.2002 10:43:43
Kontaktdaten:

Beitrag von schoppi » 15.01.2003 20:52:23

@Frankenstein: damit wird das Programm aber "nur" im Hintergrund gestartet, die Ausgaben kommen trotzdem noch auf der bash an.

Aber Tago möchte glaub ich hauptsächlich die Ausgabe ins Nirvana leiten.

Tago
Beiträge: 78
Registriert: 10.11.2002 15:13:58

Beitrag von Tago » 15.01.2003 20:59:00

Soweit ist das erstmal schon mal gut - Danke!
Aber wie schoppi schon sage, währe es auch noch besser wenn ich noch zugriff nehmen könnten, gibt es da keine Möglichkeiten.

Mal als Beispiel man könnte ja auch ein Admin tool schreiben, welchen man dann kurzeitig startet, aber diese muß dann ja auch an die Aus und Eingaben des chatservers kommen!

Benutzeravatar
Frankenstein
Beiträge: 145
Registriert: 28.01.2002 14:51:14
Lizenz eigener Beiträge: GNU Free Documentation License
Kontaktdaten:

Beitrag von Frankenstein » 15.01.2003 21:00:13

Ja und es macht aber weiterhin seine Aufgabe. Und habe keine Meldungen. Da wehere es besser zu Logen wie du es beschrieben hast.

Und wenn des Programm in Hintergrund schieke kann ich weiter auf der Konsole arbeiten falls ich es mochte.

Edit : Immer diese Tippfehler

Benutzeravatar
x-eniac
Beiträge: 660
Registriert: 12.03.2002 16:08:54
Wohnort: Wien
Kontaktdaten:

Beitrag von x-eniac » 16.01.2003 15:23:15

Einfachste möglichekit um das ganze kurz zu fassen:

Code: Alles auswählen

chatserver &>/dev/null & 
Wirft das Programm in den Hintergrund und Wirft sämtliche ausgaben weg.

Dann häng der Server jedoch immer noch an der Konsole von der du ihn gestartet hast.
Wenn du diese dann Schließt Beendet sich auch der Chatserver.
Ein

Code: Alles auswählen

info nuhup
bringt dir das ultimative Unixguru Wissen.
Die Volle Guru Kommandozeile heiß dann also:

Code: Alles auswählen

nohup "chatserver &>/dev/null &"
Tip: Wenn der Chatserver eine "Konsole" besitzt ähnlich den Quake oder Half-Life Server solltest du mal mit "screen" spielen.
Traue niemanden der nicht einmal bis 2 zählen kann!
Meine Jabber ID: xeniac@jabber.at

Antworten