【问题标题】:redirect nohup stdout and flush重定向 nohup 标准输出并刷新
【发布时间】:2011-11-28 11:35:10
【问题描述】:

我想使用 nohup 并将标准输出重定向到一个文件,但我不需要存档我只想能够交互式地查看当前标准输出。我想我可以将标准输出重定向到一个文件,以便在每次输出后刷新它

??? nohup ruby​​ myapp.rb > output.log &

交互查看输出 tail -F ./output.log

【问题讨论】:

  • 你需要更清楚这一点。如果我正确理解您的问题,那么您发布的命令正是您想要的。 tail -f 旨在让您查看日志文件中当前发生的情况。
  • 另外,你的 ruby​​ 脚本会产生什么样的输出?此输出数据是否描述了您的程序的状态并且您只想查看最新的状态更新?
  • 我的目标是避免日志文件变大,应用程序在任务结束时保存到数据库,此日志记录仅用于实时监控。所以我想知道每次覆盖日志文件是否是一个好主意,如果是这样,我该怎么做。 tail 命令完成了实时查看文件的工作,但我注意到它需要一些时间并且一次更新多行而不是一次更新一行
  • ruby 应用程序的标准输出仅是程序中各个步骤的 puts 命令的输出,是的,它只是最新的状态更新
  • 避免大日志文件可以通过logrotate程序轮换日志来解决。如果你想监控你的日志文件的大小,你可以在你的 ruby​​ 应用程序中以编程方式这样做,然后直接登录到一个文件(你必须在你的 prog 中实现一种内部 logrotate)。如果您不关心日志中某些历史数据的丢失,请查看我对这个问题的回答。

标签: linux


【解决方案1】:

您需要在此处查看我对另一个问题的回答: Linux non-blocking fifo (on demand logging).

假设现在您已经准备好ftee 程序,如果您像这样调用您的应用程序:

$ mkfifo /tmp/mylog

$ nohup ruby myapp.rb 2>&1 | tee output.log | ftee /tmp/mylog &

你会得到:

  • 文件output.log的完整输出日志
  • 通过/tmp/mylog fifo 按需提供应用的当前输出

现在,如果您想看看您的 prog 的最新输出,请执行以下操作:

$ cat /tmp/mylog

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-04
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    • 2014-01-20
    • 2011-12-08
    • 1970-01-01
    相关资源
    最近更新 更多