我需要定期(~每3-5分钟)运行cron的Perl脚本。我希望确保一段时间内只有一个Perl脚本实例在运行,这样直到上一个周期结束后,下一个周期才会开始。这可以/应该通过cron、Perl的一些内置功能来实现吗?或者我需要在脚本级别处理它?
我是Perl和cron的新手,因此非常感谢您的帮助和一般建议。
发布于 2010-02-10 09:45:11
我一直都很幸运地使用File::NFSLock获得了脚本本身的独占锁。
use Fcntl qw(LOCK_EX LOCK_NB);
use File::NFSLock;
# Try to get an exclusive lock on myself.
my $lock = File::NFSLock->new($0, LOCK_EX|LOCK_NB);
die "$0 is already running!\n" unless $lock;
这在某种程度上与其他锁文件建议相同,除了尝试获取锁之外,我不需要做任何事情。
发布于 2010-02-10 06:31:53
使用File::Pid将脚本的pid存储在一个文件中,脚本应在开始时检查该文件,如果找到则中止。您可以在脚本完成时删除pidfile,但这并不是真正必要的,因为您可以稍后简单地检查该进程id是否仍然有效(这也将解释脚本意外中止的情况):
use strict;
use warnings;
use File::Pid;
my $pidfile = File::Pid->new({file => /var/run/myscript});
exit if $pidfile->running();
$pidfile->write();
# ... rest of script...
# end of script
$pidfile->remove();
exit;
发布于 2012-02-14 02:42:07
https://stackoverflow.com/questions/2232860
复制相似问题