是否可以建立自訂流?

是否可以建立自訂流?

我不確定這裡使用什麼術語,所以請耐心等待。

我正在編寫一個產生的應用程式很多紀錄.我認為能夠讓我的應用程式將日誌串流傳輸到,並允許其他進程像流一樣foo讀取(如),這會很酷。foo/dev/random

也就是說,我想連續地將日誌串流傳輸到某個地方(不必擔心檔案系統的問題,例如歸檔、刪除等),並且能夠讓其他進程「接入」該串流,就好像它是無窮無盡的一樣文件。

我該怎麼做呢?什麼是foo

理想情況下:

terminal 1
> mkthing foo
> while :; do echo 'abcdefg' >> foo; sleep 1; done

terminal 2
> echo foo
(outputs "abcdefg" every second)

答案1

查看日誌的絕對正常方法是將它們寫入文件。當您想查看日誌時,請閱讀該文件。若要觀察附加到文件中的行,請使用以下命令tail -f,在到達文件末尾後,保持文件打開並監視附加到其中的額外行。該選項-f用於“關注”,並且在較少的F你可以用「follow」達到同樣的效果;在其他程式中,這可能被稱為“拖尾”文件,因為tail這是執行此操作的經典實用程式。看tail該網站上的標籤有關尾礦公用事業的更多資訊。

如果您絕對不想將日誌寫入文件,您可以在以下位置運行應用程式螢幕或者多路復用器。若要/usr/bin/my_application --some-option在背景運行,請使用螢幕:

screen -S myapp -d -m /usr/bin/my_application --some-option

要查看日誌:

screen -S myapp -d -r

Ctrl+A d分離,即停止查看日誌。當您查看日誌時,您還可以將輸入發送到應用程序,這可能是理想的,也可能是不需要的。若要僅授予唯讀存取權限,請參閱有沒有辦法以唯讀模式運行“螢幕”?

使用 tmux,啟動應用程式:

tmux new-session -s myapp -d /usr/bin/my_application --some-option

查看最新日誌:

tmux attach -r -t myapp

Ctrl+A d分離。運行時tmux attach無法-r與應用程式互動。


A命名管道不是你想要的。我只是提到它,因為它表面上看起來很合適(當我寫它時,它會出現在評論中)。它將執行您所描述的操作:

mkfifo foo
while :; do echo 'abcdefg' >> foo; sleep 1; done

並行於

cat foo

這不是您想要的,因為必須只有一個讀者。如果沒有讀取器,寫入端就會阻塞。如果有多個讀取器,則每一行(或區塊,取決於程式如何產生輸出)將被恰好一個讀取器看到,或多或少是隨機選擇的。如果有一個讀取器並且它消失了,那麼寫入端將無法寫入,並且如果沒有停用它們,則會收到 SIGPIPE。

相關內容