abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    KDE Plasma 6
     (74%)
     (9%)
     (2%)
     (16%)
    Celkem 805 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

    Dotaz: presmerovani vystupu do souboru

    Pavel Dobeš avatar 14.2.2007 11:15 Pavel Dobeš | skóre: 21 | Praha
    presmerovani vystupu do souboru
    Přečteno: 2440×
    Zdravim,

    mam aplikaci, ktera pada (je zabita kernelem, nahodne se ukoncuje atp.) a chtel jsem presmerovat vsechny jeji hlasky do souboru s datem startu + jeji znovuspusteni...

    udelal jsem jednoduche
    while(true);do
    dat=`date +%F_%R:%S.%N.log`
    ./prikaz > ./log_soubory/$dat
    done
    
    informace po spusteni se jiz nevypisuji, takze presmerovani funguje.

    Problem je ten, ze se nic do souboru nezapise.

    Zkousel jsem to obejit treba pomoci
    obsah=`./prikaz`
    echo $prikaz > ./log_soubory/$dat
    
    ale to taktez nevedlo k cili. Nevite jak udelat presmerovani, aby zapisovalo do souboru okazmite a nektere vypisy programu se neztracely?

    Diky PaD
    Windows? A kdo to ještě používá?

    Odpovědi

    14.2.2007 11:19 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: presmerovani vystupu do souboru

    Nejspíš je problém v tom, že jste tam nepřesměroval chybový výstup. Takže

      ./prikaz >log_soubory/$dat 2>&1
    
    Pavel Dobeš avatar 14.2.2007 11:33 Pavel Dobeš | skóre: 21 | Praha
    Rozbalit Rozbalit vše Re: presmerovani vystupu do souboru
    ja chybovy vystup NECHCI logovat. Ja chci logovat to, co se vypiisuje na std vystup - tj cinnost programu.

    A navic, pokud by to generovalo chybovy vystup, tak bych videl, ze neco nepresmerovavam, protoze se chybovy vystup na konzoli vypisuje take.
    Windows? A kdo to ještě používá?
    14.2.2007 11:39 Andrej Herceg | skóre: 43
    Rozbalit Rozbalit vše Re: presmerovani vystupu do souboru
    Nebude lepšie použiť príkaz tee? Aspoň bude vidieť, či sa na stdout niečo vypisuje.
    ./prikaz | tee ./log_soubory/$dat
    14.2.2007 11:52 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: presmerovani vystupu do souboru
    V tom případě děláte chybu někde jinde než v tom, co jste popsal. Vznikne ten soubor vůbec?
    14.2.2007 12:27 Pavel1 | skóre: 33
    Rozbalit Rozbalit vše Re: presmerovani vystupu do souboru
    A vytvoří se vůbec nějaké logy? Zkus toto, to by zaručeně logy mělo založit, pokud je vše v pořádku.
    #!/bin/bash
    while true; do
      Log=./log_soubory/`date +%F_%R:%S.%N`.log
      echo "=== Log: $Log" >> $Log
      ./prikaz >> $Log
    done
    
    14.2.2007 13:13 Jan Martinek | skóre: 43 | blog: johny | Brno
    Rozbalit Rozbalit vše Re: presmerovani vystupu do souboru
    Jestliže máš možnost zasáhnout do zdrojáku té aplikace, pak je nutno zabránit bufferování jejího standardního výstupu, jinak není možné v sledovat co se děje (bude to opožděné).
    Ten logovací program bych napsal asi takto:
    #!/usr/bin/env python
    import subprocess, time
    logfile = file('logfile', 'w')
    prikaz = ['./first.py']
    count = 0
    while True:
        count += 1
        cmd = subprocess.Popen(prikaz, stdout = subprocess.PIPE)
        logfile.write(time.ctime() + ': restart %d\n' %count)
        while True:
            line = cmd.stdout.readline()
            if not line: break
            logfile.write(time.ctime() + ': ' + line)
            logfile.flush()
    
    Vytváří pouze jeden log (přišlo mi to rozumnější) a každý řádek je označený datem a časem - zkrátka jako normální logy. Do logu se zapíšou i události o restartu, přičemž restarty se číslují.
    S tím průběžným vypisováním a bufferováním je dost problém. Už se to řešilo tady:
    http://www.abclinuxu.cz/forum/show/136974#13

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.