微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在不lockingperl的情况下locking日志文件

这是我现在正在做的,但它locking文件。@H_404_1@

#!/usr/bin/perl use Env qw( $USERNAME ); use File::Tail; use strict; use warnings; my $file = $ARGV[0]; print "$filen"; my $fileTail = File::Tail->new( name=>$file,maxinterval=>5,tail=>-1); my $line; while ( defined( $line = $fileTail->read ) ) { print $line; } exit;@H_404_1@

根据文件 ,它不应该被锁定。 你的操作系统是什么? 我不知道你是否使用Windows,虽然shebang线建议不。 因此,有关您的环境的更多细节将有所帮助。@H_404_1@

Windows(或NTFS …或Perl如何在Windows上实现打开…不完全确定)具有强制锁定转换为open()。 如果你打开一个文件阅读,其他人将无法打开写作。 如果您打开一个文件进行写入,其他人将无法打开它进行读取或写入。@H_404_1@

您正在将文件打开以供阅读,所以没有人可以写入日志。 我想这就是发生了什么事情。 File :: Tail可能没有考虑到这一点。 它在工作,因为File :: Tail似乎关闭并重新打开文件句柄,如果它没有看到任何活动,它假定它已被截断或重新创建。 这释放你的锁,让其他文件滑入写入。@H_404_1@

你可以通过打开一个用Perl进程读取的文件来测试这个,然后试着打开它来由另一个Perl进行追加。@H_404_1@

我相信一个办法来解决这个问题是打开日志文件使用Windows特定的功能,让您控制锁定行为。 Win32 :: SharedFileOpen似乎是事情。@H_404_1@

fsopen(my $fh,$file,'r',SH_DENYNO) or die "Can't read '$file' with no locks: $!n";@H_404_1@

这将打开一个文件阅读没有锁。 不幸的是,你有责任做其余的工作。 perlfaq可能会有所帮助。@H_404_1@

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐