【问题标题】:Logs are written asynchronous to log file日志异步写入日志文件
【发布时间】:2013-11-19 13:29:22
【问题描述】:

我遇到了一种奇怪的情况,当我尝试将 perl 脚本的标准输出日志重定向到日志文件时,所有日志都在脚本完成时写入,而不是在脚本执行期间写入。

在执行 tail -f "filename" 时运行脚本时,我只能在脚本完成执行时才能看到日志,而不是在脚本执行期间。

我的脚本详情如下:

/root/Application/download_mornings.pl >> "/var/log/file_manage/file_manage-$(date +\%Y-\%m-\%d).txt"

但是当我在不重定向日志文件的情况下运行时,我可以在脚本运行时在命令提示符上看到日志。

如果您需要任何其他详细信息,请告诉我。

提前感谢您提供的任何信息,以便大家了解正在发生的事情。

桑托什

【问题讨论】:

    标签: linux perl


    【解决方案1】:

    默认情况下,Perl 会缓冲输出。你可以说:

    $| = 1;
    

    (在脚本的开头)禁用缓冲。引用perldoc perlvar:

    $|

    如果设置为非零,则在每次写入后立即强制刷新或 在当前选择的输出通道上打印。默认为 0 (无论通道是否真的被系统缓冲或 不是; $| 只告诉你是否明确要求 Perl 刷新 每次写入后)。 STDOUT 通常会被行缓冲,如果输出是 到终端和块缓冲。设置这个变量是 主要在输出到管道或套接字时有用,例如 当您在 rsh 下运行 Perl 程序并想查看 发生时输出。这对输入缓冲没有影响。看 getc 为此。请参阅选择以了解如何选择输出通道。看 还有IO::Handle


    您可能还想参考Suffering from Buffering?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 2020-04-09
      • 2020-01-04
      • 1970-01-01
      • 2012-04-06
      • 2014-12-13
      相关资源
      最近更新 更多