Question

Je veux vous assurer qu'un seul processus à un court temps. Donc, je veux vous assurer que Jobb ne fonctionne pas à moins que Joba ne fonctionne pas.

Il serait grand si elle avait une certaine capacité de retenter la serrure, donc je n'ai pas à code. Quelque chose vaguement comme ceci:

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

Quelle est la meilleure façon de le faire en Perl? J'espère qu'il ya un bon module CPAN pour cela.

Était-ce utile?

La solution

#!/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

Ceci verrouillera la section DATA du programme lui-même. J'utilise cette technique, et il fonctionne très bien.

Vous pouvez l'étendre pour permettre assez facilement relances.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top