主管的孩子stdout.log:即時讀取

主管的孩子stdout.log:即時讀取

Supervisor 啟動一些子進程。

我這樣配置它們:

[program:XXXXX]
command=/XXXXX/XXXXX
directory=/XXXXXX
autostart=true
autorestart=true
startsecs=3
startretries=10000
stdout_logfile=/XXXXXX/stdout.log
stdout_logfile_maxbytes=1MB
stderr_logfile=/XXXXXX/stderr.log
stderr_logfile_maxbytes=1MB

其中一個過程是產生大量螢幕輸出,我希望在測試期間即時讀取這些輸出:每秒列印 5 行。

他們現在已經登入了stdout.log

我想stdout.log和一起閱讀

watch -0.1 tail /XXXXX/stdout.log

但我發現它在收到每一行時都沒有更新:日誌內容可能會被緩存,直到達到某個預定義的大小,然後再保存到文件中。

我不需要保留標準輸出以供將來參考。

是否有可能將主管設定為持續更新 stdout.log

或者,為了避免從長遠來看損壞磁碟,是否有可能列印回最後 X 行stdout而不將其儲存到stdout.log

答案1

如果您想避免損壞磁碟(我已經很久沒有看到有人擔心這個問題了),您可以建立一個 ramdisk 來將這些日誌檔案導向如下所示:

mkdir /var/log/tmplogs
mount -t tmpfs -o size=5m tmpfs /var/log/tmplogs

或採用 fstab 格式:

tmpfs       /var/log/tmplogs   nodev,nosuid,noexec,nodiratime,size=5M 0 0

然後使用該/var/log/tmplogs目錄作為這些檔案的目標位置。

這不會解決所說的任何日誌緩衝問題。但通常延遲是由您的命令緩衝其輸出引起的(有和沒有 tty 時它的行為可能有所不同)而不是由supervisord引起的,您可以確認遵循supervisord中的示例第803期

是否可以設定Supervisor持續更新stdout.log?

我會說不,因為它已經應該在收到後立即寫入日誌,並且大多數情況下這不是主管問題,但是如果沒有啟動命令,則無法通過以下方式判斷您是否遇到了錯誤或者​​是否正常您的命令。

相關內容