ما هي وحدة CPAN لاستخدامها في قفل الملفات غير المحظورة مع Perl
-
27-09-2019 - |
سؤال
أريد أن أتأكد من تشغيل عملية واحدة فقط في وقت واحد. لذلك أريد أن أتأكد من عدم تشغيل 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
هذا سوف يغلق بيانات قسم من البرنامج نفسه. أستخدم هذه التقنية ، وهو يعمل بشكل جيد للغاية.
يمكنك توسيعه لتمكين إعادة المحاولة بسهولة.
لا تنتمي إلى StackOverflow