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.