ここでどのような用語を使用すればよいか分かりませんが、ご容赦ください。
私は、次のようなアプリケーションを作成しています。たくさん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
「follow」であり、少ない”follow“でも同じ効果が得られますF
。他のプログラムでは、これはファイルの“tailing”として知られています。これtail
は、これを実行する古典的なユーティリティだからです。tail
このサイトのタグテーリングユーティリティの詳細については、こちらをご覧ください。
ログをファイルに書き込むことを絶対に望まない場合は、アプリケーションを次のように実行できます。画面またはtmux./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とログの監視が解除されます。ログを監視している間に、アプリケーションに入力を送信することもできますが、これは望ましいことかもしれませんし、望ましくないかもしれません。読み取り専用アクセスのみを許可するには、「screen」を読み取り専用モードで実行する方法はありますか?
tmux を使用してアプリケーションを起動するには:
tmux new-session -s myapp -d /usr/bin/my_application --some-option
最新のログを表示するには:
tmux attach -r -t myapp
Ctrl+を押すA dと切り離されます。アプリケーションと対話できるようにするには、tmux attach
切り離さずに実行します。-r
あ名前付きパイプあなたが望むものではありません。表面的には適切であるように見えるので言及しているだけです(そして私が書いている間にコメントに現れています)。それはあなたが説明したことを行います:
mkfifo foo
while :; do echo 'abcdefg' >> foo; sleep 1; done
と並行して
cat foo
これは、読者が 1 人しかいなければならないため、望ましい状態ではありません。読者がいない場合、書き込み側はブロックされます。読者が複数いる場合、各行 (またはチャンク。プログラムの出力方法によって異なります) は、ほぼランダムに選択された 1 人の読者によってのみ表示されます。読者が 1 人いて、それがなくなると、書き込み側は書き込みに失敗し、無効にしていない場合は SIGPIPE を受け取ります。