.titleBar { margin-bottom: 5px!important; }

Programmausgabe umleiten ?

Dieses Thema im Forum "FRITZ!Box Fon: Modifikationen" wurde erstellt von ahooge, 9 Feb. 2005.

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. ahooge

    ahooge Neuer User

    Registriert seit:
    6 Feb. 2005
    Beiträge:
    99
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hallo,

    ich habe mal eine Frage zu der FBF, was schon fast eine Linux-Frage ist. Wenn ich mir mal Statusmeldungen ansehen möchte, z.B. von "telefon" oder "dsld" geh ich mit Telnet auf die Box und muss diese Programme dann neu starten um die Ausgabe auf dem Terminal zu erhalten.

    Gibt es da eine Möglichkeit, die Ausgabe auf mein aktuelles Terminal zu kriegen, ohne das jeweilige Programm neu zu starten ?

    Vielen Dank im Vorraus
    schöne Grüße
    ahooge
     
  2. haveaniceday

    haveaniceday Aktives Mitglied

    Registriert seit:
    14 Okt. 2004
    Beiträge:
    1,305
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hallo ahooge,

    einen direkten Weg zur Umleitung (nachträglich ) kenne ich nicht.
    Man kann Prozesse aber mit dem Tool strace "belauschen". Dabei werden
    sämtliche ! systemcall ausgegeben.

    [excursion=unix] ;-)
    Prozesse schreiben in der Regel über "Filedeskriptoren" 0 ist stdin, 1 ist stdout, 2 ist stderr, höhere Nummern erhalten zusätzlich geöffnete Files.
    => Mit strace "write" darauf beobachten => Daten sind sichtbar.
    [/excursion]


    Problem dabei: strace zeigt sämtliche Calls => Ausfiltern notwendig, sonst sieht man viele Systemcalls wie z.B. time, "read" zum Poll (ist schon was da ..), etc.

    strace bringt seine Ausgabe auf "stderr (2)". grep liest von stdin. Deshalb in der Pipe: stderr von strace auf "stdout" umleiten => Pipe bringts zu grep...

    • Prozess-Id mit ps -ef suchen => Im Beispiel 319
    • -s 250 setzen ( sonst würden nusr 32 Byte von dem Strings ausgegeben
    • Falls der Prozess "forked" ( Also Kinder "kriegt" und für sich arbeiten läßt) "-f" nutzen.
    Beispiel für "voipd":

    # ./strace -s 250 -p 329 2>&1 | grep ^write
    Code:
    write(-1, "<14>Feb  9 12:24:23 voipd[329]: incoming(4:appl=2 plci=0x204 ncci=0x0 incoming): 11  <- 0\0", 90) = -1 EBADF (Bad file descriptor)
    Feb  9 12:24:23 voipd[329]: incoming(4:appl=2 plci=0x204 ncci=0x0 incoming): 11  <- 0
    write(9, "Feb  9 12:24:23 voipd[329]: incoming(4:appl=2 plci=0x204 ncci=0x0 incoming): 11  <- 0\r\n", 87) = 87
    write(6, "!\0\2\0\2\203\367\6\4\2\0\0\1\0\t\0\0\0\0\0\0\0\0\0\0\0\0\5\0\0\0\0\0", 33) = 33
    write(6, "\f\0\2\0\10\203v\4\4\2\0\0", 12) = 12
    write(6, "\f\0\2\0\4\203y\4\4\2\0\0", 12) = 12
    write(-1, "<14>Feb  9 12:24:23 voipd[329]: disconnected(appl=2 plci=0x204 ncci=0x0 incoming): remote: 0x0000 (0x0000) - No additional information\0", 135) = -1 EBADF (Bad file descriptor)
    Feb  9 12:24:23 voipd[329]: disconnected(appl=2 plci=0x204 ncci=0x0 incoming): remote: 0x0000 (0x0000) - No additional information
    write(9, "Feb  9 12:24:23 voipd[329]: disconnected(appl=2 plci=0x204 ncci=0x0 incoming): remote: 0x0000 (0x0000) - No additional information\r\n", 132) = 132
    write(8, "trigger", 7)                  = 7
    write(8, "trigger", 7)                  = 7
    write(8, "trigger", 7)                  = 7
    write(8, "trigger", 7)                  = 7
    write(8, "trigger", 7)                  = 7
    write(8, "trigger", 7)                  = 7
    write(-1, "<14>Feb  9 12:26:09 voipd[329]: incoming(4:appl=2 plci=0x204 ncci=0x0 incoming): 11  <- 0\0", 90) = -1 EBADF (Bad file descriptor)
    Feb  9 12:26:09 voipd[329]: incoming(4:appl=2 plci=0x204 ncci=0x0 incoming): 11  <- 0
    write(9, "Feb  9 12:26:09 voipd[329]: incoming(4:appl=2 plci=0x204 ncci=0x0 incoming): 11  <- 0\r\n", 87) = 87
    write(6, "!\0\2\0\2\203\370\6\4\2\0\0\1\0\t\0\0\0\0\0\0\0\0\0\0\0\0\5\0\0\0\0\0", 33) = 33
    write(6, "\f\0\2\0\10\203}\4\4\2\0\0", 12) = 12
    write(6, "\f\0\2\0\4\203\200\4\4\2\0\0", 12) = 12
    write(-1, "<14>Feb  9 12:26:09 voipd[329]: disconnected(appl=2 plci=0x204 ncci=0x0 incoming): remote: 0x0000 (0x0000) - No additional information\0", 135) = -1 EBADF (Bad file descriptor)
    Feb  9 12:26:09 voipd[329]: disconnected(appl=2 plci=0x204 ncci=0x0 incoming): remote: 0x0000 (0x0000) - No additional information
    write(9, "Feb  9 12:26:09 voipd[329]: disconnected(appl=2 plci=0x204 ncci=0x0 incoming): remote: 0x0000 (0x0000) - No additional information\r\n", 132) = 132
    # 
    
    Was verwundern könnte: gemischter "output": liegt daran, dass voipd von sich aus schon mit auf der session schreibt.
    "-1" als Filedescriptor: muss an dem strace liegen. Weiss nicht wieso.

    Theoretisch sollte man mit "lsof" eine Zuordnung "Descriptor" => Filename sehen. lsof habe ich aber nicht für die Box.
    strace muss man per ftp auf die Box holen und "chmod +x" machen.

    Aber vielleicht hat jemand anders eine "einfachere Idee" ?

    Haveaniceday

    PS: Hoffentlich habe ich dich nicht zu doll verwirrt..
     

    Anhänge:

  3. ahooge

    ahooge Neuer User

    Registriert seit:
    6 Feb. 2005
    Beiträge:
    99
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hi,

    ja hellelujah. Da stellt man ne kleine Frage und kriegt gleich ein komplettes Tutorial ;-)
    Vielen, vielen Dank. Das klappt. So krieg ich die Meldungen raus.

    Eine Frage hab ich dazu aber noch. Ich hab mir mittels wget die Datei auf die Box in /var/tmp gezogen. Bleibt die dort nach nem reboot vorhanden ?

    Schöne Grüße
    ahooge
     
  4. haveaniceday

    haveaniceday Aktives Mitglied

    Registriert seit:
    14 Okt. 2004
    Beiträge:
    1,305
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Bleibt leider bei einem Reboot nicht erhalten.
    In meinem "mod-05.2 war leider auch nicht genug Platz für das Tool um im Flash zu bleiben.

    Haveaniceday
     
  5. ahooge

    ahooge Neuer User

    Registriert seit:
    6 Feb. 2005
    Beiträge:
    99
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hi,

    mmh. Irgendwie schein ich etwas voreilig gewesen zu sein. Bei Voipd usw. scheint das zu gehen. Nur gerade bei "telefon" nicht. Irgendwie werden immer alte Meldugen wiederholt (bei jedem Ereignis). Und dan steht da soetwas, wie
    write(7, "...", 256) = -1 EIO (Input/Output Error)

    Und die Meldungen laufen dann voll oft durch den Bildschirm. Viiiiel öfter, als wenn ich die Ausgabe mit "killall telefon; telefon" beobachte.
    Außerdem, wie gesagt, nicht aktuelle Meldungen, sondern alte.

    Dazu vielleicht eine Idee, noch ?

    Vielen Dank im Voraus
    Schöne Grüße
    Axel
     
  6. haveaniceday

    haveaniceday Aktives Mitglied

    Registriert seit:
    14 Okt. 2004
    Beiträge:
    1,305
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Das ist der Nachteil von strace. Gibt alles aus.

    Du kannst aber mit "| grep -v write\(7" dieses wiederum ausfiltern.

    Nachteil bei 2 x pipe im Befehl: Die ausgabe erfolgt immer nur wenn der buffer voll ist.
    Alternativ kannstdu aber auch gleich mit dem richtigen "| grep write\(... " nur den gewollten Teil ausgeben.

    Haveaniceday
     
  7. ktw2003

    ktw2003 Aktives Mitglied

    Registriert seit:
    26 Juni 2005
    Beiträge:
    1,405
    Zustimmungen:
    4
    Punkte für Erfolge:
    38
    Beruf:
    ITler
    Ort:
    Mainhatten
    Ich stehe irgendwie gerade auf men Schlauch.

    Ich stelle eine Telnetverbindung zur Box her, gebe mein Webkennwort ein und warte. Abgehender Anruf, die Daten fliessen, ankommender Anruf - nichts.

    Wie kann ich dies so umleiten, dass ich es im Telnet sehen kann (alles ungefiltert)? Danke.
     
  8. olistudent

    olistudent IPPF-Urgestein

    Registriert seit:
    19 Okt. 2004
    Beiträge:
    14,761
    Zustimmungen:
    5
    Punkte für Erfolge:
    38
    Beruf:
    Softwareentwickler
    Ort:
    Kaiserslautern
    Hi.
    Welche Daten siehst du? Poste doch mal ein Log.
    Was siehst du, wenn du vor dem Gespräch den telefon neu startest?
    Code:
    ~ # killall telefon
    ~ # telefon 2>&1
    telefon: use clock_gettime(CLOCK_MONOTONIC)!
    telefon: set initial telefon time from linux time to 12:38 14.07 2005!
    sizeof TA_DATA = 0x2d94!
    telefon: Read TA_Charge ignorerd!
    Setupdaten geslesen!
    telefon: found SIP Controller 4
    telefon: found POTS Controller 3
    telefon: found ISDN Controller 2
    AB_LED: Power On
    ~ # telefon: socket accept from: 127.0.0.1
    Connect_h: Slot[1] Ctrl(4) MSN(0) CPN()
    * state change slot 1 ID 0: D_ConnectPending Reason: 0*
    ID 0 BChan (ext) 0x06
    * state change slot 1 ID 0: D_ConnectPending Reason: 0*
    AB_LED: B2 On
    * state change slot 1 ID 0: D_DisconnectPending Reason: 0*
    14.07.05 12:38     0s Slot: -1 CIP: 4                SIP0 outgoing
           ChargeU:    0
    * state change slot_hold 1 ID 0: Disconnected Reason: 3400*
    Disconnectreason: 3400
    AB_LED: B2 Off
    MfG Oliver
     
  9. ktw2003

    ktw2003 Aktives Mitglied

    Registriert seit:
    26 Juni 2005
    Beiträge:
    1,405
    Zustimmungen:
    4
    Punkte für Erfolge:
    38
    Beruf:
    ITler
    Ort:
    Mainhatten
    @olistudent
    Kann kein Log posten, da nichts ausgegeben wurde, nach ausführen deines genannten Befehl klappt es hingegen! Danke für den Tipp!
     
  10. ktw2003

    ktw2003 Aktives Mitglied

    Registriert seit:
    26 Juni 2005
    Beiträge:
    1,405
    Zustimmungen:
    4
    Punkte für Erfolge:
    38
    Beruf:
    ITler
    Ort:
    Mainhatten
    Danke nochmals, jetzt funzt schon mal das erste.
    Alle Festnetzanrufe werden jetzt ganz normal vom ISDN-CAPI-WATCH [BETA] per Telnet abgearbeitet. So bald ich Zeit habe baue ich auch noch die SIP-Anrufe ein und stelle es online.
     
  11. notrenotre

    notrenotre Neuer User

    Registriert seit:
    14 Juli 2005
    Beiträge:
    10
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    hallo,

    eine frage hätte ich?

    was bewirkt bei telefon 2>&1

    das 2>&1? kann das jemand mal kurz für mich entschlüsseln?

    gruß
    notrenotre
     
  12. olistudent

    olistudent IPPF-Urgestein

    Registriert seit:
    19 Okt. 2004
    Beiträge:
    14,761
    Zustimmungen:
    5
    Punkte für Erfolge:
    38
    Beruf:
    Softwareentwickler
    Ort:
    Kaiserslautern
    Hi.
    Google ist dein Freund. ;-)
    MfG Oliver
     
  13. jjbig

    jjbig Neuer User

    Registriert seit:
    21 März 2005
    Beiträge:
    63
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Mal eine ganz doofe Frage, kann man nicht syslogd dazu missbrauchen, die ganzen Ausgaben bequem standardisiert per UDP Port 514 an einen Syslog-Server zu schicken?
     
  14. olistudent

    olistudent IPPF-Urgestein

    Registriert seit:
    19 Okt. 2004
    Beiträge:
    14,761
    Zustimmungen:
    5
    Punkte für Erfolge:
    38
    Beruf:
    Softwareentwickler
    Ort:
    Kaiserslautern
    Anscheinend schon.
    Könnte sich ja mal einer der JFritz entwickler dazu äußern.
    Ich habe das schon probiert über eine pipe, ungefähr so:
    telefon 2>&1|logger&
    Aber da kommen die Nachrichten nicht sofort an, sondern erst wenn neue kommen. Also zu spät.

    MfG Oliver
     
Status des Themas:
Es sind keine weiteren Antworten möglich.