a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > Perl > 正文

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

2020-10-31 15:05:25
字體:
供稿:網(wǎng)友

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

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

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

下面是File::Lockfile的一個示例,非常簡單:

以下是代碼片段:

復(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)行,簡單的通過 kill -0 $pid 即可實(shí)現(xiàn)。所以即使不用上述模塊,自己實(shí)現(xiàn)也是非常容易的。

小結(jié):

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

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 免费一区二区三区 | 免费在线观看av | 成人国产一区二区 | 美女毛片免费看 | 国产成人福利 | 久久久国产精品免费 | 国产欧美日韩综合精品一 | 神马久久久久久久久 | 射久久 | 在线播放91 | 久久免费视频观看 | 中文字幕影院 | 午夜在线电影 | 中文字幕视频网站 | 国产一级片 | 欧美三级电影在线播放 | 蜜桃久久av | 欧美一区二区三区 | 国产黄色一级片 | 自拍偷拍一区二区三区 | 欧美日韩亚洲视频 | 亚洲av毛片一级二级在线 | 成人在线免费视频 | 国产精品久久久久久久 | 秋霞av电影| 日韩欧美视频在线 | 国产乱码一区二区三区 | 欧美一区二区三区四区视频 | 国产精品一区二区三区免费观看 | 日韩性猛交 | 国产精品自产拍在线观看桃花 | 国产一区二区视频在线观看 | 亚洲日韩中文字幕 | 欧美淫视频| 日韩亚洲视频在线观看 | 蜜臀久久99精品久久久久久宅男 | 亚洲 自拍 另类 欧美 丝袜 | 日韩毛片免费视频一级特黄 | 免费的黄色av网站 | 日韩中文视频 | 成人国产精品入麻豆 |