Portál AbcLinuxu, 5. května 2025 21:38

Dotaz: nefunguje stdout z tail

2.4.2014 23:17 nowis
nefunguje stdout z tail
Přečteno: 323×
Odpovědět | Admin

omlouvám se za asi začátečnický dotaz, ale nevím, jak to rychle najít…

tail -f /var/log/maillog | grep Subject
- to funguje bez problémů

chci to ale ukládat do souboru:
tail -f /var/log/maillog | grep Subject > /var/log/vsechnymaily.csv

A neukládá to nic, čím to?

Díky

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

2.4.2014 23:29 lertimir | skóre: 64 | blog: Par_slov
Rozbalit Rozbalit vše Re: nefunguje stdout z tail
Odpovědět | | Sbalit | Link | Blokovat | Admin
Příčiny mohou být jen 2. Jednak to, co vám běží na obrazovku a chcete přesměrovat nejde ze STDOUT, ale STDERR, pak výstup běží na obrazovku dále, a nic se nepřesměruje, nebo nemáte write práva do cílového souboru. Fakticky v popsaném případě nepřesměrováváte tail, ale grep. STDOUT pro tail je do STDIN grep.
2.4.2014 23:37 nowis
Rozbalit Rozbalit vše Re: nefunguje stdout z tail
díky, za odpověď.

1. úplně nerozumím. Pokud jde správný výsledek na obrazovku tak pouhým přidáním > soubor se to bude ukládat do souboru, ne?

2. jsem přihlášený jako root, takže právy to nejspíše nebude
3.4.2014 00:00 lertimir | skóre: 64 | blog: Par_slov
Rozbalit Rozbalit vše Re: nefunguje stdout z tail
Ten důvod je ještě jinde. Vy použijete tail -f , což znamená, že se proudy nezavřou a jsou otevřené do nekonečna. Přesměrování do souboru způsobí otevření write do souboru, ale nemáte žádné uzavření, tím pádem výstup do souboru zůstane viset ve write bufferu cilového souboru dokud mu nepošlete sync (což mu nepošlete asi nikdy) nebo neuplynou timeouty file systému pro zápis. Efektivně se přesměrování do souboru dá používat jen pro ukončenou akci.
3.4.2014 00:04 lertimir | skóre: 64 | blog: Par_slov
Rozbalit Rozbalit vše Re: nefunguje stdout z tail
Třeba pokud nedáte jen ten naprostý konec 10 řádků, ale pošlete více např. tail -f -n 10000 tak se něco zapíše.
KrisKo avatar 3.4.2014 08:42 KrisKo | skóre: 20
Rozbalit Rozbalit vše Re: nefunguje stdout z tail
Odpovědět | | Sbalit | Link | Blokovat | Admin
jedno z rieseni je vyuzit fifo buffer:
mkfifo fifo
tail -f /var/log/maillog > fifo
while read a; do echo $a | grep Subject >> /var/log/vsechnymaily.csv; done <fifo
nevyhodou je ze musia bezat 2 prikazy.
https://krisko210.blogspot.com
3.4.2014 08:52 R
Rozbalit Rozbalit vše Re: nefunguje stdout z tail
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ono to funguje, ale zapise sa to az ked sa zaplni buffer. Riesenie:
tail -f /var/log/maillog | stdbuf -o 0 grep Subject > /var/log/vsechnymaily.csv
Tarmaq avatar 3.4.2014 09:26 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: nefunguje stdout z tail
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tohle by taky mohlo resit dany problem ..
tail -f /var/log/maillog | grep Subject | tee /var/log/vsechnymaily.csv > /dev/null
Don't panic!
3.4.2014 15:42 lertimir | skóre: 64 | blog: Par_slov
Rozbalit Rozbalit vše Re: nefunguje stdout z tail
Tohle asi dopadne stejně. tee píše do souboru, ale zůstává to v bufferu, protože kanál není uzavřen.
3.4.2014 13:50 nowis
Rozbalit Rozbalit vše Re: nefunguje stdout z tail
Odpovědět | | Sbalit | Link | Blokovat | Admin

Pánové díky za rady! Napadlo mně, že by to mohlo být v tom neuzavřeném souboru, ale stejně tak to mohlo být spoustou jiných věcí, takže jsem rád, že jste se tomu věnovali.
Zkoušel jsem všechny způsoby. Funguje ale jen ten první, dvoupříkazový.

Tento způsob: tail -f /var/log/maillog | stdbuf -o 0 grep Subject > /var/log/vsechnymaily.csv
vrátí -bash: stdbuf: command not found

Tento způsob: tail -f /var/log/maillog | grep Subject | tee /var/log/vsechnymaily.csv > /dev/null
nic nevrátí, ale ani nic nezapisuje

raději bych používal jednopříkazový způsob, pokud by to šlo. Mohl bych Vás ještě poprosit o pomoc?

3.4.2014 14:08 pet
Rozbalit Rozbalit vše Re: nefunguje stdout z tail
stdbuf by měl být součástí balíčku coreutils. Takže doinstalivat.
3.4.2014 16:08 lertimir | skóre: 64 | blog: Par_slov
Rozbalit Rozbalit vše Re: nefunguje stdout z tail
Lepší by bylo nám napsat, co vlastně chcete dosáhnout. tail -t si dokážu představi, že si ho spustím interaktivně zjistím, co se děje a nechám vypisuje mi i aktuální změnu. Ale proč takhle a co je cílem, moc nechápu. Pokud chcete mít paralelení vyfiltrovaný soubor, tak otázka je jak přesně aktuální, nebo co se s ním bude dít dále.
3.4.2014 17:34 pavele
Rozbalit Rozbalit vše Re: nefunguje stdout z tail
Odpovědět | | Sbalit | Link | Blokovat | Admin
>> :-)

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.