`
maxer025
  • 浏览: 76052 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

如何 让Perl脚本同时只运行一个实例

阅读更多
用Perl写了一些监控脚本,放在crontab中调度执行。有时候会发觉一个脚本运行时间过长,会同时跑起多个实例,因此有必要为脚本加上控制,只运行一个实例运行。

最基本自然的想法,在脚本中检查并建立一个空的lock文件,脚本结束时再删除。通过判断文件能不能存在的形式来判断脚本能不能已经运行。不过这样做有个bug,如果脚本运行流程中异常终止,lock文件没有正常删除,就会导致脚本不能再运行。

空的lock文件不可以,那么考虑在lock文件中加入一点内容,比如进程的PID号,然后通过检查该PID号的进程能不能还在运行,就能防止上述bug了。在CPAN上有很多现成的模块能够完成上述功能,如File::Lockfile, File::Pid, Proc::PID::File 等。

下面是File::Lockfile的一个示例,非常基本:

#!/usr/bin/perl -w
use File::Lockfile;
# lock文件位于/tmp目录,名为test_file_lock.lck
my $lockfile = File::Lockfile->new('test_file_lock','/tmp');
# 检查脚本能不能
已经运行,如已运行则退出
if ( my $pid = $lockfile->check ) {
  print "program is already running with PID: $pid";
  exit;
}
#更新lock文件
$lockfile->write;
# 脚本逻辑
sleep 30
#删除lock文件
$lockfile->remove;
通过查看File/Lockfile.pm的源代码可以看到,判断lock文件中记录的进程能不能已经运行,基本的通过kill 0,$pid即可实现。所以即使不用上述模块,自己实现也是非常容易的。
分享到:
评论

相关推荐

    PERL脚本实例代码

    perl编程实例,与书配套的实例代码 $name="Suzanne"; # These variables are in package main $num=100; package friend; # Package declaration sub welcome { print "Who is your pal? "; chomp($name=); ...

    高级perl编程脚本实例 TXT版

    高级perl编程脚本实例 TXT版 配套高级perl编程 pdg电子版

    Perl实例精解(第四版).part2

    Perl 脚本在功能上类似于UNIX awk、sed、shell 脚本和C 程序。shell 脚本主要由UNIX 命令构成,Perl 脚本则不然。sed 和awk 用于编辑和报告文件,但是Perl 无需执行文件即可工作。C 没有shell、sed 和awk 的任何模式...

    基于Java的实例源码-在Java中运行Perl脚本 JERL.zip

    基于Java的实例源码-在Java中运行Perl脚本 JERL.zip

    perl常见编程100个实例

    可下载后,把模板改动一下,就可以成为自己的脚本了。

    Perl脚本实例

    Perl脚本实例,其中包含常用的基本语法,便于学习掌握

    Perl 实例精解(第三版).pdf

    第2章 Perl脚本 2.1 从命令行使用Perl 2.1.1 七开关 2.1.2 -n开关 2.1.3 -c开关 2.2 脚本设置 2.3 脚本 2.3.1 开始 2.3.2 注释 2.3.3 Perl语句 2.3.4 执行脚本 2.3.5 脚本范例(UNIX, ...

    perl脚本实例,处理文本,文件,可供学习参考

    perl处理文本文件,学习参考用。比较简单。初学perl可以参考。

    Perl实例精解(第四版).文字版_第一部分.zip

    同时,还有一个全功能的、面向对象的CGI程序和其它一些有用的脚本和HTML教程。 本书作者在教授了8年的Perl后发现,很多新学Perl的在自学如何编程时会感到灰心。大多数人最佳的方法是从简洁的小范例和实践中学习,...

    DzSoft.Perl.Editor

    DzSoft Perl Editor 是一个用于编写、编辑和调试 Perl/CGI 脚本的工具。它拥有舒适易用的界面,不但适合初学者,也适合高级程序员。DzSoft Perl Editor 看起来似乎很简单,但它其实是非常强大的工具。它具有调试功能...

    Perl 实例精解第四版

    Perl 是一种多用途的开源(免费软件)解释型语言,由称为 Perl Porters 的核心开发团队维护 和改进。它主要用作脚本语言,并且运行在众多平台上。尽管 Perl 最初是为 UNIX 操作系统设计 的,但是它以其可移植性以及现在与...

    Perl访问MSSQL并迁移到MySQL数据库脚本实例

    主要介绍了Perl访问MSSQL并迁移到MySQL数据库脚本实例,写了一个完整的迁移脚本和使用方法,需要的朋友可以参考下

    Web应用安全:使用Perl的对策进行HTML转义的方法.pptx

    Perl,一种功能丰富的计算机程序语言,运行在超过100种计算机平台上,适用广泛,从大型机到便携设备,从快速原型创建到大规模可扩展开发。 Perl 语言的应用范围很广,除CGI以外,Perl被用于图形编程、系统管理、网络...

    The Perl Programming Language

    介绍了Perl脚本语言的基本特征,给出Perl用于Internet和Web开发的程序实例,并和Phthon、Ruby进行了比较。

    Real World SQL Server Administration with Perl

    使用perl管理SQL SERVER。大量脚本实例

    Perl实例精解

    很好的perl脚本学习材料,例子比较多!中文的,适合初学者!

    正则表达式经典实例

    即使有经验的用户也经常会遇到性能不佳、误报、漏报等让人挠头的错误,《正则表达式经典实例》对于如何使用正则表达式来解决一些常见的问题给出了按部就班的解决方案,其中包括C#、Java、JavaScript、Perl、PHP、...

    HTK应用实例

    本人亲自编写的HTK应用实例,有详细的训练步骤,辅助脚本使用perl脚本编写

    perl技术内幕(英文版)+源代码

    本书详细说明了Pert的使用方法,其内容涉及到Perl应用的方方面面,并提供了大量的代码实例,使读者能够快速而容易地学会Perl。本书每一章都分为两部分,前一部分“深入分析”详细说明相关的技术信息,后一部分针对...

Global site tag (gtag.js) - Google Analytics