麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 編程 > Perl > 正文

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

2020-10-31 15:05:25
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

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

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

空的lock文件不行,那么考慮在lock文件中加入一點(diǎn)內(nèi)容,比如進(jìn)程的PID號(hào),然后通過(guò)檢查該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;

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

小結(jié):

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

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

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 免费观看又色又爽又黄的崩锅 | 日韩激情一区 | 黄色一级毛片免费看 | 青草久久网 | 欧美性激情视频 | 深夜免费观看视频 | 免看黄大片aa | 亚洲小视频在线观看,com | 激情在线视频 | 免费福利在线视频 | 性爱视频在线免费 | 宅男视频在线观看免费 | jizzzzxxxxx| 国产成人精品免费视频大全办公室 | a视频在线播放 | 91专区在线观看 | 亚洲影院在线 | av在线免费看网址 | 欧美日穴视频 | 最新中文在线视频 | 中文字幕11 | 91 在线视频观看 | 在线免费日韩 | 狠狠99| 日韩视频一区二区三区四区 | 老女人碰碰在线碰碰视频 | www国产成人免费观看视频,深夜成人网 | 久久国产精品系列 | 欧美一级电影网站 | 日本在线播放一区二区 | 国产精品剧情一区二区三区 | 在线 日本 制服 中文 欧美 | 精品三区视频 | av免费在线观看国产 | 涩涩屋av | 国产精品视频中文字幕 | 97超级碰碰人国产在线观看 | 国产羞羞网站 | 91色综合综合热五月激情 | 天天色狠狠干 | 久久精品亚洲一区 |