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

首頁 > 編程 > Perl > 正文

Perl中使用File::Lockfile確保腳本單實例運行

2020-06-04 20:31:57
字體:
來源:轉載
供稿:網友

用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;

通過查看File/Lockfile.pm的源代碼可以看到,判斷lock文件中記錄的進程是否已經運行,簡單的通過 kill -0 $pid 即可實現。所以即使不用上述模塊,自己實現也是非常容易的。

小結:

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产一级中文字幕 | 国产亚洲精品美女久久久 | 久久久电影电视剧免费看 | xxxxxx打针视频vk | 亚洲免费在线视频 | 黄色免费大片 | 美女扒开腿让男生桶爽网站 | 91精品国产综合久久青草 | 在线小视频国产 | 国产羞羞视频在线观看 | 在线观看免费污视频 | 毛片在线视频观看 | 欧美成人一区二区三区电影 | 成人三级电影网址 | 日韩色视频在线观看 | 色综合久久久久久久粉嫩 | 中文字幕在线亚洲精品 | 一级电影免费在线观看 | 久久艹逼 | 护士hd老师fre0性xxx | 成人三级电影在线 | 欧美日韩在线播放 | 国产精品久久久久久久不卡 | 久产久精品 | 毛片视频观看 | 久久久国产一级片 | 一级做a爰性色毛片免费 | av老司机久久 | 久久777国产线看观看精品 | 免费一级在线观看 | 91午夜少妇三级全黄 | 黄网站在线免费看 | japanese javhd | 亚洲精品a在线观看 | 色就色 综合偷拍区91网 | 国产1区2区3区中文字幕 | 成人毛片免费看 | 色综合网在线观看 | 精品久久久久久中文字幕 | 蜜桃网站免费 | 万圣街在线观看免费完整版 |