我遇到了一个奇怪的场景,当我试图将perl脚本的stdout日志重定向到一个日志文件时,当脚本完成时而不是在脚本执行期间,所有的日志都会在执行结束时被写入。
在运行脚本时,当我执行尾-f“文件名”时,只能在脚本完成执行时才能看到日志,而不是在脚本执行期间。
我的脚本细节如下:
/root/Application/download_mornings.pl >>“/var/log/file_manage/file_manage$(日期+Y-\\%m-\\%d).txt”
但是,当我在没有重定向日志文件的情况下运行时,我可以看到命令提示符上的日志,就像脚本进行时一样。
如果你需要其他细节,请告诉我。
提前感谢你们所有的光,你们都能摆脱所发生的一切。
桑托什
发布于 2013-11-19 05:29:22
默认情况下,Perl将缓冲输出。你可以说:
$| = 1;(在脚本的开头)禁用缓冲。引用perldoc perlvar
$|如果设置为非零,则在当前选定的输出通道上的每次写入或打印之后立即强制刷新。缺省值为0(不管系统是否真正缓冲了通道;$|只告诉您是否在每次写完之后显式地要求Perl进行刷新)。如果输出到终端,则通常会对STDOUT进行行缓冲,否则将对块进行缓冲。在输出到管道或套接字时,例如在rsh下运行Perl程序并希望看到正在发生的输出时,设置此变量非常有用。这对输入缓冲没有影响。有关这一点,请参见getc。参见选择如何选择输出通道。另见IO::Handle。
您还可以参考受缓冲的折磨?。
https://stackoverflow.com/questions/20063827
复制相似问题