- 浏览: 76052 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (98)
- Linux (6)
- vsftpd vsftp ftp (2)
- perl flock (1)
- ajax (1)
- highcharts (1)
- http://www.bejson.com/knownjson/webInterface/ (1)
- mysql (1)
- iOS研究框架之SDwebimage原理 (1)
- oepn ssl (1)
- mysql插入时间戳列 (1)
- mysql pool (1)
- gsoap (1)
- VS (1)
- angular http jsonp (1)
- NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL (1)
- http://www.cnblogs.com/madyina/p/5970814.html (1)
- 批量生成各尺寸的iOS图标 (1)
- Ionic2 Rest 认证 (1)
- 反编译工具 IDA (1)
- formbuilder (1)
- asp.net com 80040154 Class not registered (1)
- angular2-highcharts用法详解 (1)
- 儿童教育资源 (1)
- Accordion List with Ionic (1)
- 清华附小权威老师推荐详细书单 (0)
- android (1)
- Hexadecimal -> file (binary) (1)
- open ssl (1)
- swift apple (1)
- 常见网址 (0)
- Charles4.2.5 (1)
- swift link (1)
- 域名 空间申请 (0)
- 常见网址 免费主机 (1)
- 最详细的美国旅游签证办理流程 (1)
- 公司办理美国签证流程 (0)
- link (1)
- 楼市 (0)
- inatall uml (1)
- 信用卡 (0)
- net use 共享 删除 (1)
- perl ftp (1)
- cron (1)
- 2018 self evauation (0)
- upload by ftp linux script (1)
- 青少年学习 (1)
- Shell脚本交互之:自动输入密码 (1)
- 通过ffmpeg实现视频流截图 (1)
- Discuz论坛迁移--数据库配置文件 (1)
- ELK(ElasticSearch (1)
- Logstash (1)
- Kibana)搭建实时日志分析平台 (1)
- 阿里面试题目目录 (1)
- network-attached storage (NAS) (1)
- jar (1)
- PostgreSQL操作-psql基本命令 (0)
- PostGreSQL (1)
- 百度网盘资源搜索 (1)
- git command (1)
- log4perl MinGW Dev C++ (1)
- perl 自定义模块 (1)
- 使用virt-manager安装和管理虚拟机 (1)
- ActivePerl5.14 (1)
- servicenter (1)
- 民国货币 (0)
- 物价变迁 (0)
- 历年养老金涨幅 (1)
- 1987年北京物价 (1)
- 金融业总资产 (1)
- 中国通史 (0)
- How to change @INC to find Perl modules in non-standard locations (1)
- ruby on rails (1)
- win10 ruby (1)
- Sybase isql常用命令 (1)
- php开发环境搭建 (1)
- check_Radius_Account.php (1)
- SymmetricDS (1)
- Kotlin Eclipse 环境搭建 (1)
- 基于SpringBoot搭建应用开发框架 基于SpringBoot-Dubbo的微服务快速开发框架 (1)
- 架构师技术图谱,助你早日成为架构师 (1)
- Java并发编程:volatile关键字解析 (1)
- MySQL 表锁和行锁机制 (1)
- IntelliJ IDEA 2018激活码 永久破解 (0)
- 基于 Javassist 和 Javaagent 实现动态切面 (1)
- JAVA必背面试题和项目面试通关要点(带答案) (1)
- Hadoop分布式集群的搭建 (1)
- navicat112_premium (0)
- snmp trap (1)
- net snmp linux (1)
- net snmp trap (1)
- install wmi in linux (1)
- vidyard (0)
- compare file content (1)
- XINETD TCP echo service (1)
- 从页面获取form表单提交的数据 (1)
- thymeleaf 分页 级联 (1)
- Apache log4j2 远程命令执行漏洞复现及修复方案 (1)
- win7 瘦身 (0)
最新评论
用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即可实现。所以即使不用上述模块,自己实现也是非常容易的。
最基本自然的想法,在脚本中检查并建立一个空的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即可实现。所以即使不用上述模块,自己实现也是非常容易的。
发表评论
-
linux upload script
2018-12-06 17:06 439#!/bin/sh find /root/rmsdata/E ... -
cron
2018-11-27 11:26 296crontab -e SHELL=/bin/bash */ ... -
shell脚本判断进程是否存在并重启
2016-04-07 11:00 1988#!/bin/bash # cd /opt/rms/mobi ... -
linux yum安装
2012-07-18 10:35 774yum的安装是比较简单的,不过设置yum的升级资源库稍微麻烦点 ... -
Red Hat Enterprise Linux 5安装gcc
2012-07-06 16:29 2704本文全是如何用rpm包在红帽子5上安装gcc,auto ...
相关推荐
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编程 pdg电子版
Perl 脚本在功能上类似于UNIX awk、sed、shell 脚本和C 程序。shell 脚本主要由UNIX 命令构成,Perl 脚本则不然。sed 和awk 用于编辑和报告文件,但是Perl 无需执行文件即可工作。C 没有shell、sed 和awk 的任何模式...
基于Java的实例源码-在Java中运行Perl脚本 JERL.zip
可下载后,把模板改动一下,就可以成为自己的脚本了。
Perl脚本实例,其中包含常用的基本语法,便于学习掌握
第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可以参考。
同时,还有一个全功能的、面向对象的CGI程序和其它一些有用的脚本和HTML教程。 本书作者在教授了8年的Perl后发现,很多新学Perl的在自学如何编程时会感到灰心。大多数人最佳的方法是从简洁的小范例和实践中学习,...
DzSoft Perl Editor 是一个用于编写、编辑和调试 Perl/CGI 脚本的工具。它拥有舒适易用的界面,不但适合初学者,也适合高级程序员。DzSoft Perl Editor 看起来似乎很简单,但它其实是非常强大的工具。它具有调试功能...
Perl 是一种多用途的开源(免费软件)解释型语言,由称为 Perl Porters 的核心开发团队维护 和改进。它主要用作脚本语言,并且运行在众多平台上。尽管 Perl 最初是为 UNIX 操作系统设计 的,但是它以其可移植性以及现在与...
主要介绍了Perl访问MSSQL并迁移到MySQL数据库脚本实例,写了一个完整的迁移脚本和使用方法,需要的朋友可以参考下
Perl,一种功能丰富的计算机程序语言,运行在超过100种计算机平台上,适用广泛,从大型机到便携设备,从快速原型创建到大规模可扩展开发。 Perl 语言的应用范围很广,除CGI以外,Perl被用于图形编程、系统管理、网络...
介绍了Perl脚本语言的基本特征,给出Perl用于Internet和Web开发的程序实例,并和Phthon、Ruby进行了比较。
使用perl管理SQL SERVER。大量脚本实例
很好的perl脚本学习材料,例子比较多!中文的,适合初学者!
即使有经验的用户也经常会遇到性能不佳、误报、漏报等让人挠头的错误,《正则表达式经典实例》对于如何使用正则表达式来解决一些常见的问题给出了按部就班的解决方案,其中包括C#、Java、JavaScript、Perl、PHP、...
本人亲自编写的HTK应用实例,有详细的训练步骤,辅助脚本使用perl脚本编写
本书详细说明了Pert的使用方法,其内容涉及到Perl应用的方方面面,并提供了大量的代码实例,使读者能够快速而容易地学会Perl。本书每一章都分为两部分,前一部分“深入分析”详细说明相关的技术信息,后一部分针对...