Какой модуль CPAN использовать для неблокирующей блокировки файлов с помощью Perl

Я хочу убедиться, что одновременно работает только один процесс. Поэтому я хочу убедиться, что jobB не запускается, если не работает jobA.

Было бы здорово, если бы у него была возможность повторить попытку блокировки, поэтому мне не нужно это кодировать. Что-то смутно такое:

LockFileModule->lock(
    lockfile           => '/fabulous/pants',
    retries            => 12,
    timeout            => 25,
    timebetweenretries => 30,
) or die "the other job is still running";

Как лучше всего это сделать в Perl? Я надеюсь, что для этого есть хороший модуль CPAN.


person Eric Johnson    schedule 24.11.2010    source источник
comment
Да, это просто и отлично работает. Но он не повторяет попытку блокировки. Вероятно, мне следует смириться с этим и написать четыре строки кода, чтобы сделать цикл.   -  person Eric Johnson    schedule 24.11.2010


Ответы (1)


#!/usr/bin/perl
unless (flock(DATA, LOCK_EX|LOCK_NB)) {
    $logger->info("$0 is already running. Exiting.\n" );
    exit(1);
} else {
    $logger->info("$0 not already running, so starting instance now." );
}

__DATA__
Do not delete this. Used for flock code above

Это заблокирует раздел DATA самой программы. Я использую эту технику, и она работает очень хорошо.

Вы можете расширить его, чтобы включить повторные попытки довольно легко.

person Brock    schedule 24.11.2010
comment
NFS зависит от реализации NFS. В общем, да. - person Brock; 24.11.2010