本文介绍了如何防止Perl脚本多次并行运行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个可能会运行很长时间的脚本。在Linux上。当它运行时,当被相同或不同的用户第二次调用时,它应该检测到这一点并拒绝运行。我正在试图弄清楚如何创建一个合适的信号量,即使进程因某种原因而终止,它也会被清除。

我遇到了How to prevent PHP script running more than once?哪些当然可以应用,但我想知道在Perl中是否可以更好地实现这一点。

例如,Perl具有"在进程退出时清理已创建的临时文件"标志(文件::临时::清理),我认为无论进程如何结束,都会触发该标志。但此API只能用于创建具有随机名称的临时文件,因此它不能用作信号量的文件名。我不明白文件如何被删除的底层机制,但听起来这个机制是存在的。如何为命名文件执行此操作,例如/var/run/foobar?

或者有没有更好的方法来做到这一点?

推荐答案

use strict;
use warnings;
use Fcntl ':flock';

flock(DATA, LOCK_EX|LOCK_NB) or die "There can be only one! [$0]";


# mandatory line, flocking depends on DATA file handle
__DATA__

这篇关于如何防止Perl脚本多次并行运行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

11-03 03:49