3

node app.jsWeb サーバー、自動テスト、バックグラウンドでのコンパイルなど、複数のプロセスが実行されている開発スタックがあります。これらはすべて、またはなどの基本的なコマンド ライン コマンドlein midje :autotestです。

1 つのスクリプトでこれらすべてのプロセスを「バックグラウンド」で実行し、それらの出力を 1 つの stdout にマージする(つまり、ターミナルの画面に表示する) ことは可能ですか?

私が見つけた (& を使用した) 簡単な bash ソリューションの問題の 1 つは、Ctrl+C でバックグラウンド プロセスが明らかに維持されていることであり、これは望ましくありません。

トラップを追加しようとしまし'kill $(jobs -pr)' SIGINT SIGTERM EXITたが、これは OS X では確実に機能しないようです。驚くべきことに、ノード プロセスは強制終了されますが、スクリプトが終了した後も Java プロセスは生き続けます (Ctrl+C を使用)。

どんなスクリプト言語でも使えます。私は純粋な bash または JS を好みますが、Python または Ruby も問題ありません。

また、マージされた出力で ANSI エスケープ カラーリングを維持したいと考えています。

4

1 に答える 1

2

multitailユーティリティを使用する場合があります。ログファイルを追跡できるだけでなく、任意の CLI プログラム ( lein runlein midje :autotest、 ...) の出力も可能です。

例:

$ multitail --mergeall -cT ANSI -l "lein midje :autotest" -cT ANSI -l "lein ring server-headless"

Ctrl-C追跡されているすべてのプロセスを強制終了します。

OSX ユーザーの場合は、次multitailを使用してインストールできますbrew install multitail(homebrew が既にインストールされていると仮定します。インストールされていない場合は、http://mxcl.github.io/homebrew/を参照してください) 。

マルチテール構成に関する詳細情報を取得するには、 を参照してくださいman multitailhttp://www.vanheusden.com/multitail/index.phpにも使用例があります。

于 2013-06-21T06:38:19.880 に答える