我有5个perl脚本,并且想要确保如果某人运行其中一个脚本并尝试同时运行另一个脚本,则第二个脚本会因另一个脚本正在运行的消息而死亡
我在其他stackoverflow上看到这个机制处理一个实例: What's the best way to make sure only one instance of a Perl program is running?
use Fcntl ':flock';
open my $self, '<', $0 or die "Couldn't open self: $!";
flock $self, LOCK_EX | LOCK_NB or croak "This script is already running";
我的问题是有一个选项可以构建一些机制来确保只有一个脚本在Windows上运行而无需在所有脚本上锁定外部文件吗?
答案 0 :(得分:1)
如果您有五个单独的脚本,并且它们都不能同时运行,则需要某种方式来访问它们之间的共享数据源。该共享源告诉他们其中一个是否正在运行,并且正确管理可能非常棘手。如果您不喜欢锁机制,可以尝试数据库,Redis或类似的东西,但我没有特别看到它的价值。如果您认为使用flock
是笨拙的,那么将其解压缩到一个模块中,然后使用该模块或找到管理共享信息的其他方法,例如锁定模式语句中的数据库“SELECT FOR UPDATE”。 / p>
我的问题:如果您不想锁定外部文件,这背后的原因是什么?如果我们知道这一点,我们可以更好地回答你的问题。