如何在将输出记录到文件时运行命令?

如何在将输出记录到文件时运行命令?

我有一个控制台应用程序,需要作为在我的服务器上部署新应用程序版本的一部分来运行。

该控制台应用程序旨在输出到控制台,并且无法更改。

我想正常运行它,但将 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。所以你可以关闭 shell,它会继续运行。如果您希望看到发生了什么,那么您可以使用 来跟踪输出tail -f nohop.out
  2. tee命令将执行相同的操作而不阻止 SIGHUP。 C2h 和 goldilock 已经提到过这一点。
  3. 如果您只需要有限的回滚,请尝试screen -L。这有更详细的解释在这篇文章中

我意识到 screen 是一种解决方法,但它的其他功能非常适合部署。

相关内容