GNU/Linux >> Znalost Linux >  >> Linux

Daemontools Multilog ztratí informace o čase řádku protokolu. Jak to opravit?

Ke sledování procesu a jeho výstupního protokolu používám daemontools. K zápisu protokolů na disk používám multilog.

Spouštěcí skript pro protokol je:

#!/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin
cd /usr/local/script_dir
exec multilog t s16777215 n50 '!tai64nlocal' '!/bin/gzip' /var/log/script_log

Monitorovaný proces také zapisuje výstup do stderr. Takže ve spouštěcím skriptu pro proces jsou následující řádky pro přesměrování stderr na stdout:

exec 2>&1
exec ./my_process

Při sledování souboru protokolu však vidím stovky řádků výstupu přicházejících v dávkách (sledovaný proces zapisuje výstup každých několik sekund) a časové razítko na řádcích protokolu se liší v submikrosekundových úrovních. Z povahy procesu vím, že časový rozdíl mezi řádky logu není tak malý. Je zřejmé, že multilog ukládá výstup do vyrovnávací paměti a poté přidává časové razítko, když je připraven k zápisu do souboru. Přál bych si, aby časová razítka přesněji odrážela čas, kdy byla linka na výstupu. Jak to lze opravit?

Přijatá odpověď:

Skript, který byl monitorován, byl skript Python. Aby byly všechny standardní streamy bez vyrovnávací paměti, zjistil jsem, že stačí předat -u možnost tlumočníka. Tím se problém v mém případě vyřešil.


Linux
  1. Zpracovat každý řádek výstupu z `ping` okamžitě v potrubí?

  2. Jak opravit Hibernate?

  3. Crontab Log:Jak protokolovat výstup mého skriptu Cron

  1. Jak přesměrovat výstup již běžícího procesu

  2. Jak vytisknout výstup příkazu Linuxu do souboru?

  3. Jak se může zdát, že proces má ve výstupu ps jiný název?

  1. Jak změnit přesměrování výstupu běžícího procesu?

  2. Jak mohu uvést jeden název souboru na výstupní řádek v Linuxu?

  3. Jak mohu zaznamenat využití procesoru na proces?