複数のユーザーが利用できるようにしたい端末出力があります
現在は次のようなものです:
command > /var/logs
入力の場合、
watch tail -30 /var/logs
入力端子用。
ただし、watch は更新があったときに出力するのではなくポーリングのみを実行し、tail はスクロールバックを許可しないため、これは望ましくありません。
答え1
あなたが提起する 2 つの問題:
更新があったときに出力するのではなく、投票のみを監視する
tail -f
ポーリングしません。GNU Coreutils バージョン 7.5 以降では、tail -f
Linux カーネルのinotify
インターフェイスを使用して、ファイルが変更されたことを示す信号をカーネルから受信します。GNU Coreutils を使用しない場合、または何らかの理由で 7.5 より古いバージョンを使用する場合は、1 秒に 1 回ポーリングします。Linux 以外の POSIX オペレーティング システム (BSD、Solaris など) でもポーリングが行われる可能性がありますが、ケースバイケースで調べる必要があります。これらの OS の一部は GNU Coreutils を使用しますが、カーネルが をサポートしていません。また、 GNU Coreutils をまったくinotify
使用せずに実装しているものもあります。tail
tail はスクロールバックを許可しません
このless
コマンドは、特に、stdin
(コマンドなどからのtail
) データをバッファリングし、前後にスクロールできるように設計されています。バッファは無制限ではありませんが、コマンド ライン オプションを使用してバッファを増減したり、前後スクロールのバッファの長さを変更したりできます。
だから、例えば、
tail -f /var/logs | less
ポーリングせずにログのスクロールバック バッファーを保持できるようになります (tail
カーネルがファイルが変更されたことを伝える信号を送信するまで、CPU を消費せずにアイドル状態のままになります)。
複数のユーザーが同じバッファから読み取ることができるようにする必要がある場合は、セッションtail -f /var/logs
内で実行できますscreen
。私の最初の回答では、複数のユーザーが同時に同じログ データを表示できるようにこれを実行することを考慮していませんでした。@Let_Me_Be が言及しscreen
、それがおそらく最善の策であることに気づきました。
そこで、私の解決策と @Let_Me_Be の解決策を組み合わせます。
screen -mdS logview -- tail -f /var/logs
警告: 未テストです。間違っている場合は編集してください。しかし、ここでは適切な解決策に近づいていると思います。
マルチユーザーモードにする必要がありますscreen
。これは少し複雑なので、これサイト自体が語っています。要点は、ファイルmultiuser on
に追加する必要があるということです~/.screenrc
。また、よくある問題そのリンクの下部にあります。
ユーザーがログを表示するには、次の手順を実行します。
screen -rS logview
それをすべきです。
答え2
screen
または のようなプログラムが必要ですtmux
。