什么是最好的方式,以确保只有一个实例Perl程序运行?
-
19-08-2019 - |
题
有几种方法来这样做,但我不知道哪一个是最好的。
这里有什么我可以认为:
- 寻找过程中使用pgrep.
- 有脚本锁本身使用的羊群,然后检查,如果它被锁定在每次运行。
- 创建一个pid文件/var/运营/program_name.pid和检查存在,并比较pid如果需要的话。
可能有更多的方法做到这一点。你认为什么是最好的办法?
解决方案
有许多方式来做到这一点。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文件,文件将自动得到解锁当的程序退出。它更容易实现在一个可靠的方式。
其他提示
做老PID文件的伎俩。
- 开始的进程
- 看看是否有一个文件叫"myprog.PID"
- 检查是否存在运行的proc.匹配的PID使用杀0,$pid
- 如果prog名PID proc.相匹配,大声抱怨和退出
- 如果不是,清理过期"myprog.PID"
- 创建一个文件叫"myprog.PID",然后继续
禾田
干杯,
Rob
所有的选项清单的罚款。有一件事与这虽然是要注意的是,在罕见的情况下,可以结束了一个进程的运行很长时间(即,滞留在等待的东西).你也许想要考虑保持一眼于如何长的其他运行实例已经运行和可能发送给自己一个警告如果超过一定的时间(例如一天也许).
不隶属于 StackOverflow