From 0d4fed889904c5eeba05f12bdbf8d14f0e3ae0a8 Mon Sep 17 00:00:00 2001 From: Tomas Cohen Arazi Date: Sun, 12 Apr 2020 10:27:57 -0300 Subject: [PATCH] Bug 23571: Prevent concurrent execution of fines.pl This patch introduces locking in fines.pl. It does so by leveraging on bug 25109, which introduces a generic locking implementation on Koha::Script. The introduced changes: 1. Try to get the lock 2.a. If success, normal execution happens 2.b. If rejected, cronlogaction is called with a meaningful message and a normal exit happens, so we don't flood the logs in vain. --verbose will make the script print the same message on STDERR, as already is the case with this script To test: 1. Apply this patch 2. In two separate consoles run: $ kshell k$ perl misc/cronjobs/fines.pl --verbose SUCCESS => The first one runs normally, the second one exists really fast and prints a message about the lock. 3. Sign off :-D Sponsored-by: Orex Digital Signed-off-by: Tomas Cohen Arazi Signed-off-by: Kyle M Hall Signed-off-by: Jonathan Druart Signed-off-by: Martin Renvoize --- misc/cronjobs/fines.pl | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/misc/cronjobs/fines.pl b/misc/cronjobs/fines.pl index a5b920a880..10287bbaa6 100755 --- a/misc/cronjobs/fines.pl +++ b/misc/cronjobs/fines.pl @@ -36,6 +36,7 @@ use C4::Overdues; use Getopt::Long; use Carp; use File::Spec; +use Try::Tiny; use Koha::Calendar; use Koha::DateUtils; @@ -76,6 +77,19 @@ if ($help) { exit; } +my $script_handler = Koha::Script->new({ script => $0 }); + +try { + $script_handler->lock_exec; +} +catch { + my $message = "Skipping execution of $0 ($_)"; + print STDERR $message + if $verbose; + cronlogaction( $message ); + exit; +}; + cronlogaction(); my @borrower_fields = -- 2.39.5