• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >perl > Perl中使用File::Lockfile确保脚本单实例运行

Perl中使用File::Lockfile确保脚本单实例运行

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了lockfile,lockfile是什么,lockfile.lck,no lockfile found,英雄联盟lockfile等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

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

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

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

下面是File::Lockfile的一个示例,非常简单:

以下是代码片段:

#!/usr/bin/perl -w
useFile::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;
# 脚本逻辑
sleep30
#删除lock文件
$lockfile->remove;
</div>

通过查看File/Lockfile.pm的源代码可以看到,判断lock文件中记录的进程是否已经运行,简单的通过 kill -0 $pid 即可实现。所以即使不用上述模块,自己实现也是非常容易的。

小结:

该方法是在脚本中经常用到限制单实例的方法,MySQL 等程序在每次启动前也会检查上次遗留的 mysql.pid 文件。

另一个方法:给lock文件加排它锁,判断是否有锁来确保唯一性。

</div>

您可能想查找下面的文章:

  • Perl中使用File::Lockfile确保脚本单实例运行

相关文章

  • perl中heredoc使用说明
  • Perl脚本实现递归遍历目录下的文件
  • Perl eval函数使用实例
  • perl数组的多数字下标示例代码
  • 用python下载百度文库的代码
  • perl命令行参数内建数组@ARGV浅析
  • perl控制流介绍(if条件,while,for循环,foreach)
  • Perl函数(子程序)学习笔记
  • perl文件读取的几种处理方式小结
  • perl中my与our的区别介绍

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • 不错的一篇学习CGI脚本(脚本)
    • 写了个perl的删除程序
    • perl Socket编程实例代码
    • Perl图形化包管理工具PPM学习使用笔记
    • Perl初学笔记之Hello World
    • Perl实现遍历目录例子
    • using Net::SSH2 shell 的二个方法
    • 7个perl数组高级操作技巧分享
    • cpan安装Net::SSH::Perl中遇到的一些问题
    • perl命令行参数内建数组@ARGV浅析

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有