Какой лучший способ убедиться, что работает только один экземпляр программы Perl?
Есть несколько способов сделать это, но я не уверен, какой из них лучший.
Вот о чем я могу думать:
- Ищите процесс, используя pgrep.
- Заблокируйте script с помощью flock, а затем проверьте, заблокирован ли он каждый раз, когда он запускается.
- Создайте файл pid в /var/run/program _name.pid и проверьте наличие, и при необходимости сравните pids.
Есть, вероятно, больше способов сделать это. Как вы думаете, лучший подход?
Ответы
Ответ 1
Есть много способов сделать это. Файлы PID - это традиционный способ сделать это. Вы также можете заблокировать файл, например, программу. Этот небольшой фрагмент кода сделает трюк:
use Fcntl ':flock';
open my $self, '<', $0 or die "Couldn't open self: $!";
flock $self, LOCK_EX | LOCK_NB or die "This script is already running";
Одно преимущество над файлами PID заключается в том, что файлы автоматически разблокируются при выходе из программы. Это намного проще реализовать надежным способом.
Ответ 2
Сделайте старый трюк файла PID.
- начать процесс
- посмотреть, есть ли файл с именем "myprog.PID"
- проверьте наличие запущенного процесса. с соответствующим PID с использованием kill 0, $ pid
- если имя прога PID спички, громко жаловаться и выход
- если нет, уберите устаревший "myprog.PID"
- создайте файл с именем "myprog.PID", а затем продолжите
НТН
веселит,
обкрадывать
Ответ 3
Все варианты, которые вы перечисляете, являются точными. Однако с этим стоит помнить, что в редких случаях вы можете завершить процесс, который работает очень долго (т. Возможно, вам стоит подумать о том, чтобы следить за тем, сколько времени работает другой исполняемый экземпляр, и, возможно, отправить вам предупреждение, если оно превышает определенное количество времени (например, день).