最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Perl中使用File::Lockfile確保腳本單實(shí)例運(yùn)行

 更新時(shí)間:2014年11月24日 09:50:51   投稿:junjie  
這篇文章主要介紹了Perl中使用File::Lockfile確保腳本單實(shí)例運(yùn)行的方法,本文直接給出實(shí)例,方法非常簡(jiǎn)單,需要的朋友可以參考下

用Perl寫了一些監(jiān)控腳本,放在crontab中調(diào)度執(zhí)行。有時(shí)候會(huì)發(fā)現(xiàn)一個(gè)腳本運(yùn)行時(shí)間過長(zhǎng),會(huì)同時(shí)跑起多個(gè)實(shí)例,因此有必要為腳本加上控制,只運(yùn)行一個(gè)實(shí)例。

最簡(jiǎn)單自然的想法,在腳本中檢查并創(chuàng)建一個(gè)空的lock文件,腳本結(jié)束時(shí)再刪除。通過判斷文件是否存在的方式來判斷腳本是否已經(jīng)運(yùn)行。不過這樣做有個(gè)bug,如果腳本運(yùn)行過程中異常終止,lock文件沒有正常刪除,就會(huì)導(dǎo)致腳本無法再運(yùn)行。

空的lock文件不行,那么考慮在lock文件中加入一點(diǎn)內(nèi)容,比如進(jìn)程的PID號(hào),然后通過檢查該P(yáng)ID號(hào)的進(jìn)程是否還在運(yùn)行,就能避免上述bug了。在CPAN上有很多現(xiàn)成的模塊能夠完成上述功能,如File::Lockfile, File::Pid, Proc::PID::File 等。

下面是File::Lockfile的一個(gè)示例,非常簡(jiǎn)單:

以下是代碼片段:

復(fù)制代碼 代碼如下:

#!/usr/bin/perl -w
useFile::Lockfile;
# lock文件位于/tmp目錄,名為test_file_lock.lck
my $lockfile= File::Lockfile->new('test_file_lock','/tmp');
# 檢查腳本是否已經(jīng)運(yùn)行,如已運(yùn)行則退出
if ( my $pid= $lockfile->check ) {
  print"program is already running with PID: $pid";
  exit;
}
#更新lock文件
$lockfile->write;
# 腳本邏輯
sleep30
#刪除lock文件
$lockfile->remove;

通過查看File/Lockfile.pm的源代碼可以看到,判斷l(xiāng)ock文件中記錄的進(jìn)程是否已經(jīng)運(yùn)行,簡(jiǎn)單的通過 kill -0 $pid 即可實(shí)現(xiàn)。所以即使不用上述模塊,自己實(shí)現(xiàn)也是非常容易的。

小結(jié):

該方法是在腳本中經(jīng)常用到限制單實(shí)例的方法,MySQL 等程序在每次啟動(dòng)前也會(huì)檢查上次遺留的 mysql.pid 文件。

另一個(gè)方法:給lock文件加排它鎖,判斷是否有鎖來確保唯一性。

相關(guān)文章

最新評(píng)論

靖江市| 比如县| 石家庄市| 怀远县| 黎川县| 资兴市| 泽库县| 湄潭县| 拉孜县| 石屏县| 措勤县| 怀宁县| 宿松县| 赤峰市| 于田县| 北辰区| 郓城县| 驻马店市| 行唐县| 平安县| 军事| 永福县| 鸡东县| 弥渡县| 湟中县| 普洱| 廉江市| 黄山市| 五常市| 安顺市| 水富县| 内丘县| 湖口县| 沙坪坝区| 贡嘎县| 江安县| 临夏县| 深水埗区| 灵璧县| 铅山县| 呼和浩特市|