Saya menggunakan daemontools untuk memantau proses dan log outputnya. Saya menggunakan multilog untuk menulis log ke disk.
Skrip run untuk log adalah:
#!/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
Proses yang dipantau, juga menulis output ke stderr. Jadi di skrip run untuk proses ada baris berikut untuk mengarahkan stderr ke stdout:
exec 2>&1
exec ./my_process
Namun, saat mengekor file log, saya melihat ratusan baris keluaran datang secara beruntun (proses yang dipantau menulis keluaran setiap beberapa detik), dan stempel waktu pada baris log berbeda dalam level sub-mikrodetik. Saya tahu dari sifat prosesnya bahwa perbedaan waktu antara garis-garis log tidak terlalu kecil. Jelas multilog adalah buffering output dan kemudian menambahkan cap waktu ketika siap untuk menulis ke file. Saya ingin stempel waktu untuk lebih mencerminkan waktu di mana garis itu dikeluarkan. Bagaimana ini bisa diperbaiki?
Jawaban yang Diterima:
Skrip yang dipantau adalah skrip Python. Untuk membuat semua aliran standar tidak dibuffer, saya menemukan bahwa seseorang dapat melewati -u
pilihan untuk penerjemah. Ini memecahkan masalah dalam kasus saya.