Portál AbcLinuxu, 10. května 2025 09:05

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: 2461×
Odpovědět | Admin
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á?
Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře.

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
Odpovědět | | Sbalit | Link | Blokovat | Admin

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
Odpovědět | | Sbalit | Link | Blokovat | Admin
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
Odpovědět | | Sbalit | Link | Blokovat | Admin
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, (c) 1999-2007 Stickfish s.r.o.