Я пытаюсь убедиться, что только один экземпляр сценария Perl может работать одновременно.Сценарий выполняет какое-то действие db_operation в зависимости от переданных параметров. Сценарий не обязательно находится в одном месте или на одном компьютере, и, возможно, в нескольких ОС.Хотя файловая система автоматически монтируется на разных компьютерах.
Моим первым подходом было просто создать файл .lock и сделать следующее:
use warnings;
use strict;
use Fcntl qw(:DEFAULT :flock);
...
open(FILE,">>",$lockFilePath);
flock(FILE,LOCK_EX) or die("Could not lock ");
do_something();
flock(FILE,LOCK_UN) or die("Could not unlock ");
close(FILE);
, но я продолжаю получать следующие ошибки:
Bareword "LOCK_EX" not allowed while "strict subs" in use
Bareword "LOCK_UN" not allowed while "strict subs" in use
Поэтому я ищу другой способ решения проблемы.Сама блокировка БД также нецелесообразна, поскольку БД может использоваться другими сценариями (что приемлемо), я просто пытаюсь предотвратить запуск этого сценария.А блокировка таблицы для записи нецелесообразна, поскольку мой сценарий не знает, для какой таблицы выполняется операция, он просто запускает другой сценарий perl, предоставляемый в качестве параметра.
Я думаю добавить таблицу вdb, с одним значением, и использовать его в качестве мьютекса, но я не знаю, насколько это практично / надежно (в моей голове много красных флажков).У меня есть DBI-соединение с БД, которое использует этот скрипт.
Спасибо