私はサーバーを実行しており、このサーバーのログはファイルではなくターミナルにログインします。このログを表示するために使用量を減らしたいと思います。
node server.js | less
ログを確認したいだけの場合は、Shift+キーを使用してFファイルの終わりに到達し、ログを監視し続けます。止めたいときはCTRL+ を使いますC。
残念ながら、これによりサーバーも停止します。サーバーを停止することなく、ログの最後の監視を停止したいだけです。
これを行う方法?
私はサーバーを実行しており、このサーバーのログはファイルではなくターミナルにログインします。このログを表示するために使用量を減らしたいと思います。
node server.js | less
ログを確認したいだけの場合は、Shift+キーを使用してFファイルの終わりに到達し、ログを監視し続けます。止めたいときはCTRL+ を使いますC。
残念ながら、これによりサーバーも停止します。サーバーを停止することなく、ログの最後の監視を停止したいだけです。
これを行う方法?
回答:
でFモードを終了する方法が見つからないためless、回避策を使用する必要があります。たとえば、出力をtmpファイルに保存してから、代わりにそのtmpfileを監視します。
node server.js > tmpfile & less tmpfile
&なりnode.js、バックグラウンドで実行するコマンドを。つまり、less tmpfileすぐに起動し、tmpfileを追跡します。
に入るとless、を押しFてフォローモードに入ることができますが、Ctrl+ Cはサーバーを強制終了せず、フォローを停止するだけです。これで、好きなようにスクロールして、ヒットFしてフォローを再開できます。
通常、「Forward forever」モードを終了することは想定されていないようです。これは、マニュアルで+をman less押したときに入るモードの名前です。ShiftF
しかし、とにかくあなたが通常に戻る方法を少し汚いトリックを見つけました。ただし、コマンドが一時的にフリーズするため、中断することなく実行するサーバーに適しているかどうかはわかりません。
とにかく、ここにトリックがあります:
あなたはnode server.js | lessすでにやり始めてShift+ Fを押して「Forward forever」モードに入ったと思います。これlessで、キーを押しても反応しなくなりました。
この状態では、Ctrl+ Cを押してサーバープロセスを強制終了し、less後でを押して終了することができますQ(ただし、なんらかの理由で、ジョブリストでコマンドを停止されたプロセスのままにします- fg続行するには、実行して完全に実行する必要があります後に終了します)が、これは私たちが望むものではありません。
代わりに、Ctrl+ Zを押してコマンドを停止(「フリーズ」)し、シェルプロンプトに戻ることもできます。ここで、シェルコマンドfg( " f ore g round")をすばやく入力して、コマンドをフォアグラウンドで実行し続けます。nodeサーバープロセスもこの短時間の間一時停止されることに注意してください。これが許容できるかどうかを検討する必要があります。
これlessで、前と同じように、再びフォアグラウンドで実行されていますよね?はい、ただし魔法のように、「Forward forever」モードではなくなりました。矢印キーなどを使用して、上下にスクロールできます。
残念ながら、lessバッファの更新が完全に停止したようです。スクロールダウンできるのは、先にコマンドをフリーズした行までで、それ以上はスクロールできません。nodeサーバーがまだ実行されていると、私達はちょうど取得する必要がありますけれども、出力を生成しているless再びリフレッシュすること。
lessキーHを押しながらQ順に押すだけで、ヘルプ画面を開いて再び閉じるのが最も簡単な方法です。今、すべてが再び正常に動作しているようです。
ただし、最もクリーンな解決策は、おそらくterdonの回答に従い、出力を一時ファイルにリダイレクトしless、ファイルの監視に使用することです。
%ではなく、実行できることに注意してくださいfg。タイプするのが簡単/速いです。また、F(shift-f)はhqトリックをしなくても機能するようです。いいね!ログをフォローしているときに、できることctrl-z % Enter、できることを減らし、を押すことでフォローに戻ることができますF。
                    lessのフォローを使用する場合に特にそうです。同時に複数の端末で機能します。
                    TSTP信号が新しいデータの到着を待機していた読み取りシステムコールを中断するため、これはおそらく機能します。less0バイトを受け取り、出力が終了したと結論付けます。サーバーの一時停止を回避するには、新しいターミナルウィンドウを開きます。psプロセスのプロセスIDを実行して識別しlessます。次にと入力しkill -TSTP <PID>; kill -CONT <PID>ます。このようにして、入力中に信号が遅れることなく、連続して配信されます。
                    kill、代わりにSIGINTを送信できます。その後CONT、を送信する必要はなく、less単にあなたを待っています。
                    あなたの質問が言うように:
このサーバーは、ファイルではなくターミナルにログインします。
(temp)ログファイルを使用したくないと思います。おそらく、ログが巨大であるか、または何らかの理由でログが大きい可能性があります。
fifoファイル。私が思いついたのはnamed pipe file、fifoファイルとしても知られているものを使用しています。このファイルは、ログをlessにパイプするためにのみ使用され、何も保存されません。
最初にfifo file:
mkfifo mylog
サーバーを実行し、ログをこのファイルにリダイレクトします。
node server.js > mylog &
lessを使用してログを読み取ります(-fはlessにこの特別なファイルの読み取りを強制します)。
less -f mylog
今、あなたは使用することができますshift+ F従うこと、およびCTRL+ Cフォローを停止するが、サーバーがまだ実行されている、あなたが再び出力をたどることができますshift+ F。
バックアップ計画:サーバーが停止した場合は、コマンド(node server.js > mylog &)をファイル(eg:server.shなど)に配置するだけで、node server.js > mylog &run:を実行する代わりにbash server.sh > mylog &、を実行しless -f mylogます。
logrotate。
                    
lessしてシェルプロンプトに戻りますか?または、最新の行を監視する代わりにログをスクロールできる通常の非追跡モードに戻りますか?nodeless