web-dev-qa-db-ja.com

出力を生成するコマンドに影響を与えずに、より少ない出力で次の出力を停止するにはどうすればよいですか?

サーバーを実行していますが、このサーバーのログは、ファイルではなくターミナルに記録されます。このログを表示するためにlessを使用したいと思います。

node server.js | less

ログを表示するだけの場合は、プレスを使用します Shift+F ファイルの終わりに到達し、ログを監視し続けます。止めたいときは CTRL+C

残念ながら、これによりサーバーも停止します。サーバーを停止せずにログの終わりの監視を停止したいだけです。

これを行う方法?

10
Ajay Kumar

Flessモードを終了する方法が見つからないため、回避策を使用する必要があります。たとえば、出力をtmpファイルに保存し、代わりにそのtmpfileを監視します。

node server.js > tmpfile & less tmpfile

&は、node.jsコマンドをバックグラウンドで実行します。つまり、less tmpfileはすぐに開始され、tmpfileを追跡します。

lessになったら、押すことができます F フォローモードに入るが、今 Ctrl+C サーバーを強制終了するのではなく、フォローのみを停止します。好きなようにスクロールしてヒットできます F フォローを再開します。

15
terdon

通常、「Forward forever」モードを終了することは想定されていないようです。これは、手動でman lessを押すと入力するモードの名前です Shift+F

しかし、とにかく通常の状態に戻す方法を少し汚いトリックを見つけました。ただし、コマンドが一時的にフリーズされるため、おそらく連続して実行されるサーバーに適しているかどうかはわかりません。


とにかく、ここにトリックがあります:

node server.js | lessを既に開始しており、 Shift+F 「Forward forever」モードに入ります。これでlessはキー押下に反応しなくなりました。

この状態では、押すことができます Ctrl+C サーバープロセスを強制終了し、を押してlessを終了できます Q (ただし、何らかの理由でジョブリストでコマンドを停止プロセスのままにします-続行するにはfgを実行し、その後完全に終了する必要があります)、これはnot 私たちが欲しいもの。

代わりに、押すこともできます Ctrl+Z コマンドを停止(「フリーズ」)して、シェルプロンプトに戻ります。シェルコマンドfg( "foreground ")コマンドをフォアグラウンドで実行し続けます。 nodeサーバープロセスもこの短い時間中に一時停止されることに注意してください。これが受け入れられるかどうかを考慮する必要があります。

lessが前と同じようにフォアグラウンドで再び実行されるようになりました。はい、しかし魔法のように「Forward forever」モードではなくなりました。あなたが使用することができます矢印キーを再度上下にスクロールします。

残念ながら、lessはバッファの更新を完全に停止したようです。スクロールできるのは、コマンドを先に凍結した行までで、それ以上はできません。 nodeサーバーはまだ実行中であり、出力を生成していますが、再度更新するにはlessを取得する必要があります。

私が見つけた最も簡単な方法は、less 'ヘルプ画面を開き、キーを押して再び閉じることです。 H そして Q 順次。今、すべてが再び正常に動作しているようです。


ただし、最もクリーンなソリューションは、おそらく terdon's answer に従い、lessを使用して出力を一時ファイルにリダイレクトし、ファイルを監視することです。

12
Byte Commander

あなたの質問が言うように:

このサーバーは、ファイルではなくターミナルにログインします。

(temp)ログファイルを使用したくないと思います。おそらく、ログは巨大であるか、何らかの理由であります。


名前付きパイプ、fifoファイル。

私が思いついたのは、named pipe fileとも呼ばれるfifoファイルを使用することです。このファイルは、ログをより少なくパイプするためにのみ使用され、何も保存されません。

最初にfifo fileを作成します:

mkfifo mylog

サーバーを実行し、ログをこのファイルにリダイレクトします。

node server.js > mylog &

Lessを使用してログを読み取ります(-fはlessを使用してこの特殊ファイルを読み取ります)。

less -f mylog

これで使用できます shift+F フォローする CTRL+C フォローを停止しますが、サーバーはまだ実行中です。出力を再度フォローできます shift+F


バックアップ計画:サーバーを停止した場合は、コマンド(node server.js > mylog &)をファイルに挿入します(例:server.sh)。次にnode server.js > mylog &を実行する代わりにrun:bash server.sh > mylog &を実行し、less -f mylogを実行します。

3
Ravexina