我遇到过一些奇怪的情况,当我尝试将perl脚本的stdout日志重定向到日志文件时,所有日志都会在脚本完成时执行结束而不是在脚本执行期间写入。
当我执行tail -f“filename”时运行脚本时,我只能在脚本执行完并不执行脚本时才能看到日志。
我的脚本详情如下:
/root/Application/download_mornings.pl>> “/ var / log / file_manage / file_manage - $(date + \%Y - \%m - \%d).txt”
但是当我在没有重定向日志文件的情况下运行时,我可以在脚本进行时看到命令提示符上的日志。
如果您需要任何其他详细信息,请与我们联系。
提前感谢你们所有人都可以解决的任何事情。
桑托什
答案 0 :(得分:3)
默认情况下,Perl会缓冲输出。你可以说:
$| = 1;
(在脚本开头)禁用缓冲。引用perldoc perlvar
:
$|
如果设置为非零,则立即强制刷新并在每次写入或之后 在当前选定的输出通道上打印。默认值为0 (无论通道是否真的由系统缓冲或 不;
$|
仅告诉您是否已明确要求Perl进行刷新 每次写完后)。如果输出为STDOUT
,通常会进行行缓冲 到终端和否则缓冲块。设置此变量是 主要用于输出管道或插槽时,例如 当您在rsh下运行Perl程序并想要查看时 输出正在发生。这对输入缓冲没有影响。看到getc
为此。请参阅有关如何选择输出通道的选择。看到 还IO::Handle
。
您可能还想引用Suffering from Buffering?。