
我不確定這裡使用什麼術語,所以請耐心等待。
我正在編寫一個產生的應用程式很多紀錄.我認為能夠讓我的應用程式將日誌串流傳輸到,並允許其他進程像流一樣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。