有几种方法可以做到这一点,但我不确定哪一种是最好的。
这是我能想到的:
- 使用 pgrep 查找进程。
- 使用flock 让脚本自己锁定,然后在每次运行时检查它是否被锁定。
- 在 /var/run/program_name.pid 中创建一个 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 文件技巧。
高温高压
干杯,
抢
您列出的所有选项都很好。不过,其中一件事是要注意,在极少数情况下,您最终可能会得到一个运行很长时间的进程(即,等待某事)。您可能需要考虑关注其他正在运行的实例已经运行了多长时间,如果超过一定时间(例如可能是一天),可能会向自己发送警报。