首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >cron仅运行一个Perl脚本实例

cron仅运行一个Perl脚本实例
EN

Stack Overflow用户
提问于 2010-02-10 06:03:18
回答 7查看 14.3K关注 0票数 21

我需要定期(~每3-5分钟)运行cron的Perl脚本。我希望确保一段时间内只有一个Perl脚本实例在运行,这样直到上一个周期结束后,下一个周期才会开始。这可以/应该通过cron、Perl的一些内置功能来实现吗?或者我需要在脚本级别处理它?

我是Perl和cron的新手,因此非常感谢您的帮助和一般建议。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-02-10 09:45:11

我一直都很幸运地使用File::NFSLock获得了脚本本身的独占锁。

代码语言:javascript
运行
复制
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;

这在某种程度上与其他锁文件建议相同,除了尝试获取锁之外,我不需要做任何事情。

票数 14
EN

Stack Overflow用户

发布于 2010-02-10 06:31:53

使用File::Pid将脚本的pid存储在一个文件中,脚本应在开始时检查该文件,如果找到则中止。您可以在脚本完成时删除pidfile,但这并不是真正必要的,因为您可以稍后简单地检查该进程id是否仍然有效(这也将解释脚本意外中止的情况):

代码语言:javascript
运行
复制
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;
票数 12
EN

Stack Overflow用户

发布于 2012-02-14 02:42:07

Sys::RunAlone模块很好地完成了您想要的任务。只需添加

代码语言:javascript
运行
复制
  use Sys::RunAlone;

在代码的顶部附近。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2232860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档