好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > shell腳本實現文件鎖功能

shell腳本實現文件鎖功能

熱門標簽:百度地圖的地圖標注 地圖標注超出范圍怎么辦 東莞電銷機器人價格一覽表 excel地址地圖標注 陜西電銷卡外呼系統怎么安裝 杭州機器人外呼系統 佛山高德地圖標注中心 百度地圖標注圖標更換 旅游地圖標注大全

1.背景

當多個進程可能會對同樣的數據執行操作時,這些進程需要保證其它進程沒有在操作,以免損壞數據。通常,這樣的進程會使用一個“鎖文件”,也就是建立一個文件來告訴別的進程自己在運行,如果檢測到那個文件存在則認為有操作同樣數據的進程在工作。這樣的問題是,進程不小心意外死亡了,沒有清理掉那個鎖文件,那么只能由用戶手動來清理了。

2.關于flock

flock 是對于整個文件的建議性鎖。也就是說,如果一個進程在一個文件(inode)上放了鎖,那么其它進程是可以知道的。(建議性鎖不強求進程遵守。)最棒的一點是,它的第一個參數是文件描述符,在此文件描述符關閉時,鎖會自動釋放。而當進程終止時,所有的文件描述符均會被關閉。

3. shell中實現flock系統調用的命令是flock,其使用格式有以下兩種(man flock)


復制代碼 代碼如下:

flock [-sxon] [-w timeout] lockfile [-c] command...
flock [-sxun] [-w timeout] fd


選項和參數:


-s,--shared:獲取一個共享鎖,在定向為某文件的FD上設置共享鎖而未釋放鎖的時間內,其他進程試圖在定向為此文件的FD上設置獨占鎖的請求失敗,而其他進程試圖在定向為此文件的FD上設置共享鎖的請求會成功。
-x,-e,--exclusive:獲取一個排它鎖,或者稱為寫入鎖,為默認項
-u,--unlock:手動釋放鎖,一般情況不必須,當FD關閉時,系統會自動解鎖,此參數用于腳本命令一部分需要異步執行,一部分可以同步執行的情況。
-n,--nb, --nonblock:非阻塞模式,當獲取鎖失敗時,返回1而不是等待
-w, --wait, --timeout seconds:設置阻塞超時,當超過設置的秒數時,退出阻塞模式,返回1,并繼續執行后面的語句
-o, --close:表示當執行command前關閉設置鎖的FD,以使command的子進程不保持鎖。
-c, --command command:在shell中執行其后的語句

4. shell中實現排它鎖避免腳本重復執行

Linux中的例行性工作排程crontab會定時執行一些腳本,但腳本的執行時間往往無法控制,當腳本執行時間過長時,可能會導致上一次任務的腳本還沒執行完,下一次任務的腳本又開始執行了。這種情況下可能會出現一些并發問題,嚴重時會導致出現臟數據/性能瓶頸的惡性循環。
通過使用flock建立排它鎖可以規避這個問題,如果一個進程對某個加了排他鎖,則其它進程無法加鎖,可以選擇等待超時或馬上返回。測試實例如下:

4.1 創建執行腳本

復制代碼 代碼如下:

#cat /scripts/shell/file_lock.sh
#!/bin/bash
# Description: test for file flock
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

echo ""
echo "----------------------------------"

echo "start at `date '+%Y-%m-%d %H:%M:%S'` ..."

sleep 140s

echo "finished at `date '+%Y-%m-%d %H:%M:%S'` ..."


4.2 創建定時任務:測試排它鎖


復制代碼 代碼如下:

#crontab -e
* * * * * flock -xn /dev/shm/test.lock -c "sh /scripts/shell/file_lock.sh > /root/stdout.log"

每分鐘執行一次該腳本,并將輸出信息寫入到stdout.log
 
查看輸出日志如下:
復制代碼 代碼如下:

----------------------------------
start at 2014-04-10 10:23:01 ...            #獲取鎖
finish at 2014-04-10 10:25:21 ...           #釋放鎖
 
 
----------------------------------
start at 2014-04-10 10:26:01 ...            #10:27:00及10:28:00啟動的定時任務由于無法獲取鎖,以失敗而退出執行,直到10:26:00才獲取到鎖
finish at 2014-04-10 10:28:21 ...


4.3 測試排它鎖,加上等待超時


復制代碼 代碼如下:

* * * * * flock -x -w 20 /dev/shm/test.lock -c "sh /scripts/shell/file_lock.sh > /root/stdout.log"

查看日志輸出信息:
復制代碼 代碼如下:

----------------------------------
start at 2014-04-10 10:29:01 ...
finish at 2014-04-10 10:31:21 ...
 
----------------------------------
start at 2014-04-10 10:31:21 ...    #10:31:00啟動的定時任務等待了20秒后,上一個任務釋放了鎖,所以此任務可以馬上拿到鎖,并繼續執行
finish at 2014-04-10 10:33:41 ...

您可能感興趣的文章:
  • linux shell之文件鎖

標簽:通遼 南充 雅安 朝陽 延邊 西藏 隨州 青島

巨人網絡通訊聲明:本文標題《shell腳本實現文件鎖功能》,本文關鍵詞  shell,腳本,實現,文件,鎖,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《shell腳本實現文件鎖功能》相關的同類信息!
  • 本頁收集關于shell腳本實現文件鎖功能的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 丝瓜视频草莓视频| 男生宿舍的女生| 毛片网在线观看| 狠狠躁夜夜躁人人爽超碰女h| 欧美 91 在线 国内 日韩| 10款夜间禁用短视频软件| 日日碰日日摸日日澡| 成全在线播放视频在线播放| 国产黄色在线播放| 后进圆润极品白嫩翘臀| 啊啊啊太爽了| 日本xxwwxxww视频免费丝袜| 色综合天| 国产操女人| 精品久久久中文字幕| 欧美性大片免费| 国产微拍一区| 在线欧美香蕉欧美美馆| 免费的直播软件app| 久久综合狠狠综合久久97色| 秋霞国产午夜精品A片| 张筱雨《魅惑》40张| 局长开我小嫩苞| 国产在线拍揄自揄拍无码男男| 国产三级日本三级在线播放| 疯狂奶水freeseⅹ| 直男室友让我爽了一夜男男| 久久精品国产一区二区三区日韩| 国模冰莲极品肥美自慰人体写真| 男人被c黄漫画动漫| 赵小米kitty裸19分钟视频| 精品大臿蕉视频在线观看| 一级做aA片毛片久久久婷王| 国产午夜在线人成视频| 久久欧洲视频| 张柏芝黑森林高清大图50张37| 激情综合五月网| 我的暴露日记第二部| 男人用jj捅女人的jj30分钟| 用力深一点再用力白娜| a级理论片|