出力をファイルに書き込むときにコマンドをどのように実行できますか?

出力をファイルに書き込むときにコマンドをどのように実行できますか?

私のサーバーに新しいアプリケーションバージョンをデプロイするプロセスの一環として実行する必要があるコンソールアプリケーションがあります。

このコンソールアプリケーションはコンソールに出力するように設計されており、変更することはできません。

正常に実行したいのですが、stdoutとstderrをファイルに書き込みながらコンソールに出力したいと思います。

Linuxでこれを行うにはどうすればよいですか?

答え1

あなたはそれを使用することができますtee http://en.wikipedia.org/wiki/Tee_(コマンド)

パイプ専用標準出力

cmd | tee log.txt | less

stdout と stderr の両方を転送するには:

cmd >>(tee stdout.log) 2>>(tee stderr.log >&2)

答え2

あなたはそれを使用することができますtee。たとえば、

ls -l / | tee tmp.txt

標準出力として印刷し、tmp.txt出力コピーを含みます。 tmp.txt に stderr を含めるには:

ls -l / 2>&1 | tee tmp.txt

答え3

これを行う方法はいくつかあります。

  1. nohup 2>&1 application &。これにより、すべての出力がnohup.outというファイルに転送されます。 SIGHUPもキャッチします。したがって、シェルを閉じても引き続き実行されます。何が起こっているのかを確認するには、を使用して出力を追跡しますtail -f nohop.out
  2. これteeコマンドは、SIGHUP をブロックせずに同じ操作を実行します。 C2hとgoldilockはすでにこれについて言及しています。
  3. 制限されたロールバックのみが必要な場合は、次のことを試してください。screen -L。これはもう少し詳細な説明があります。この記事では

画面が回避策であることはわかっていますが、画面の他の機能は展開に適しています。

関連情報