NFS를 통해 파일 잠금이 악명 높지만 악용 될 수 있습니다. 서버 인스턴스를 "잠금"이있는 서버에 대한 정보가 들어있는 네트워크 액세스 가능 파일로 조정하십시오.
...
if (-f "/network/accessible/file.lock") {
open my $fh, '<', "/network/accessible/file.lock";
my $lockholder = <$fh>;
die "Server lock held by $lockholder";
# ... you could also examine $lockholder and verify that
# the other server is still alive ...
} else {
open my $fh, '>', "/network/accessible/file.lock";
print $fh $ENV{HOSTNAME},":$$";
close $fh;
}
...
# need to remove the lock when the current server finishes
END { unlink "/network/accessible/file.lock" }
두 서버를 서로 밀리 초 내에 시작하지 않으면 충분합니다. 당신이 그것에 대해 편집증 적이라면, 서버가 생성 된 후 또는 프로그램 전체에서 주기적으로 잠금 파일을 읽게하여 잠금 파일 정보가 변경되지 않았는지 확인할 수 있습니다.
} else {
open my $fh, '>', "/network/accessible/file.lock";
print $fh $ENV{HOSTNAME},":$$";
close $fh;
sleep 1;
open $fh, '<', "/network/accessible/file.lock";
my $lockholder = <$fh>;
if ($lockholder ne "$ENV{HOSTNAME}:$$") {
die "Server lock was stolen by $lockholder!";
}
}
출처
2017-10-13 14:10:33
mob
Fcntl을 사용하여 스크립트의 인스턴스 하나를 어떻게 만듭니 까? – choroba
https://blog.booking.com/highlander-daemons-without-daemons.html – choroba
재현 할 수있는 예제를 제공해 주시겠습니까? '동일한 파일 시스템'이란 NFS 마운트를 의미합니까? NFS 잠금 관리자가 제대로 작동하는지 확인 했습니까? 원격 파일 잠금이 적용되지 않는 이유는 여러 가지입니다. 적어도 그들은 필수 사항이 아니라 임의의 것입니다. – Sobrique