ما هي وحدة CPAN لاستخدامها في قفل الملفات غير المحظورة مع Perl

StackOverflow https://stackoverflow.com/questions/4263447

سؤال

أريد أن أتأكد من تشغيل عملية واحدة فقط في وقت واحد. لذلك أريد أن أتأكد من عدم تشغيل JobB ما لم يكن Joba قيد التشغيل.

سيكون من الرائع أن يكون لديه بعض القدرة على إعادة إعادة القفل حتى لا أضطر إلى ترميز ذلك. شيء غامض مثل هذا:

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

ما هي أفضل طريقة للقيام بذلك في بيرل؟ آمل أن تكون هناك وحدة جيدة CPAN لهذا الغرض.

هل كانت مفيدة؟

المحلول

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

هذا سوف يغلق بيانات قسم من البرنامج نفسه. أستخدم هذه التقنية ، وهو يعمل بشكل جيد للغاية.

يمكنك توسيعه لتمكين إعادة المحاولة بسهولة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top