これにより問題が発生します。
node "$SUMAN_PROJECT_ROOT/server.js" | bunyan -o short &> ${LOG_FILE} &
これは働きます:
node "$SUMAN_PROJECT_ROOT/server.js" &> ${LOG_FILE} &
問題は、最初のコマンドの出力がファイルに送信されないことです。 2番目のコマンドでは、実際にファイルに転送されます。最初のコマンドが機能しない理由 - 2番目のコマンドと同様に、出力をファイルに送信すると予想しました。 Bunyanコマンドはgrepに似ている必要があり、nodeコマンドの出力をフィルタリングしてマッピングするだけです。
私の編集者は提案されたソリューションが好きではありません。
ベストアンサー1
node "$SUMAN_PROJECT_ROOT/server.js" &> ${LOG_FILE} &
まず、作業順序を確認してみましょう。
これは、node
コマンドの標準出力と標準エラーを取得してリダイレクトすることを意味します。両方ログファイルに。 (そして変数を引用する必要があります。LOG_FILEにスペースが含まれている場合は中断されます。スペースやその他の特殊文字が原因でシェルスクリプトが停止するのはなぜですか?)
コマンドはバックグラウンドに配置されますが、&
実際には関係ありません。
node "$SUMAN_PROJECT_ROOT/server.js" | bunyan -o short &> ${LOG_FILE} &
おっしゃったコマンドが動作しません。これは、node
コマンドの標準出力を取得してbunyan
コマンドに渡して、標準出力と標準エラーをリダイレクトすることです。bunyan
堂々としたログファイルに。
これがうまくいかないと言ったので、興味のあるコマンドの出力がnode
標準エラーで送信されることは明らかな結論です。いいえ標準出力。標準エラーもリダイレクトされるように使用または&|
使用してください。node ... 2>&1 | ...
(&|
ポータブルではないのが残念ですが、&>
そんな点は気にしないようです。)