加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何确保一次只运行一个Perl脚本的副本?

发布时间:2020-12-15 23:23:25 所属栏目:大数据 来源:网络整理
导读:我需要确保一次只运行一个Perl脚本的副本.根据建议 here我写了一个子进行检查: sub check_instances { open my $fh,'',$0 or die $!; unless (flock($fh,LOCK_EX|LOCK_NB)) { print "$0 is already running. Exiting.n"; exit 1; } } 但它不起作用.可能是
我需要确保一次只运行一个Perl脚本的副本.根据建议 here我写了一个子进行检查:

sub check_instances {
    open my $fh,'<',$0 or die $!; 

    unless (flock($fh,LOCK_EX|LOCK_NB)) {
        print "$0 is already running. Exiting.n";
        exit 1;
    } 
}

但它不起作用.可能是什么问题?

解决方法

你正在使用一个范围内的词法文件句柄.当check_instances返回时,文件句柄会自动关闭,从而释放锁定.因此,除非两份副本在同一时间进行检查,否则您永远不会看到冲突.

只要脚本正在运行(或者只要您想保持锁定),请确保文件句柄保持打开状态.例如:

{
my $fh;
sub check_instances {
    return if $fh; # We already checked
    open $fh,LOCK_EX|LOCK_NB)) {
        print "$0 is already running. Exiting.n";
        exit 1;
    } 
}
} # end scope of $fh

如果您需要Perl 5.10,这也是使用state variable的好地方.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读