日志与日志文件异步写入

时间:2013-11-19 05:22:51

标签: linux perl

我遇到过一些奇怪的情况,当我尝试将perl脚本的stdout日志重定向到日志文件时,所有日志都会在脚本完成时执行结束而不是在脚本执行期间写入。

当我执行tail -f“filename”时运行脚本时,我只能在脚本执行完并不执行脚本时才能看到日志。

我的脚本详情如下:

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

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

如果您需要任何其他详细信息,请与我们联系。

提前感谢你们所有人都可以解决的任何事情。

桑托什

1 个答案:

答案 0 :(得分:3)

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

$| = 1;

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

  

$|

     

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


您可能还想引用Suffering from Buffering?