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