Какой модуль CPAN использовать для неблокирующей блокировки файлов с помощью Perl - PullRequest
1 голос
/ 24 ноября 2010

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

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

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

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

1 Ответ

2 голосов
/ 24 ноября 2010
#!/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 самой программы. Я использую эту технику, и она работает очень хорошо.

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

...