亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Linux Shell > 正文

shell腳本實現文件鎖功能

2020-07-27 19:11:44
字體:
來源:轉載
供稿:網友

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 ...

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲电影免费观看高清| 亚洲成人在线视频播放| 91精品国产91久久久久福利| 91av视频在线免费观看| 国产欧美一区二区三区在线| 欧美视频中文在线看| 国色天香2019中文字幕在线观看| 亚洲精品国产综合区久久久久久久| 久久综合国产精品台湾中文娱乐网| 九九精品在线视频| 久久视频在线播放| 亚洲国产天堂久久国产91| 欧美视频一区二区三区…| 成人xxxx视频| 一本色道久久88综合亚洲精品ⅰ| 欧美大片免费观看在线观看网站推荐| 97精品欧美一区二区三区| 国产亚洲美女久久| 精品久久久久久| 精品五月天久久| 91免费看视频.| 欧美日韩国产色视频| 亚洲精品www久久久| 日本在线观看天堂男亚洲| 亚洲国产婷婷香蕉久久久久久| 日韩中文在线不卡| 成人av资源在线播放| 中文字幕欧美国内| 国产精品美女网站| 91精品国产91久久久久久吃药| 亚洲性日韩精品一区二区| 亚洲免费中文字幕| 68精品久久久久久欧美| 91久久精品国产91久久性色| 91精品国产综合久久男男| 久久亚洲影音av资源网| 日韩电影在线观看永久视频免费网站| 亚洲精品97久久| 亚洲xxxxx| 国产精品成人一区二区| 久久全球大尺度高清视频| 亚洲色图校园春色| 欧美xxxx做受欧美| 久久久久日韩精品久久久男男| 亚洲护士老师的毛茸茸最新章节| 精品国产精品自拍| 欧美大码xxxx| 欧美大片大片在线播放| 欧美疯狂性受xxxxx另类| 欧洲永久精品大片ww免费漫画| 久久高清视频免费| 亚洲欧美国产一区二区三区| 日韩中文字幕在线视频播放| 亚洲精品国产综合久久| 91中文字幕一区| 久久福利网址导航| 韩国v欧美v日本v亚洲| 国产欧美在线观看| 精品久久久久久中文字幕一区奶水| 日韩免费观看视频| 综合网日日天干夜夜久久| 欧美特黄级在线| 美女精品久久久| 欧美高清视频在线播放| 欧亚精品在线观看| 亚洲视频在线播放| 欧美高清无遮挡| 国产精品吊钟奶在线| 一本色道久久88综合亚洲精品ⅰ| 91国产在线精品| 欧美日韩精品国产| 色综合久久88色综合天天看泰| 97久久久久久| 久久久久在线观看| 91色视频在线导航| 日韩亚洲一区二区| 亚洲影视九九影院在线观看| 久久久久久这里只有精品| 午夜精品久久久久久99热| 日韩高清电影好看的电视剧电影| 日韩国产欧美精品一区二区三区| 奇米影视亚洲狠狠色| 亚洲欧美在线播放| 国产精品流白浆视频| 日韩动漫免费观看电视剧高清| 国内精品久久久| 国产伊人精品在线| 欧美裸体xxxxx| 午夜精品一区二区三区在线播放| 欧美另类老女人| 色偷偷亚洲男人天堂| 久久久久亚洲精品国产| 亚洲欧美一区二区三区久久| 国内精品久久影院| 日本国产高清不卡| 国产精品精品视频一区二区三区| 不卡毛片在线看| 午夜剧场成人观在线视频免费观看| 永久免费精品影视网站| 亚洲视频在线播放| 夜夜嗨av色综合久久久综合网| 日韩中文字幕不卡视频| 亚洲成人久久一区| 国产九九精品视频| 欧美伊久线香蕉线新在线| 日韩精品极品在线观看| 91香蕉国产在线观看| 91亚洲精品久久久久久久久久久久| 亚洲最大的网站| 91亚洲va在线va天堂va国| 日韩精品电影网| 九九热在线精品视频| 欧美国产日韩一区二区| 欧美—级高清免费播放| 日韩网站免费观看高清| 久久久久久美女| 在线观看精品自拍私拍| 国产日韩欧美综合| 亚洲国产精品国自产拍av秋霞| 韩剧1988免费观看全集| 91av视频导航| 亚洲美女在线观看| 91成人免费观看网站| 欧美三级欧美成人高清www| 一区二区三区www| 日韩免费观看在线观看| 午夜精品久久久久久久久久久久| 久久久国产精品亚洲一区| 亚洲综合日韩在线| 7777精品久久久久久| 亚洲天堂第一页| 亚洲视频在线免费观看| 不卡中文字幕av| 亚洲精品国产综合区久久久久久久| 91精品中国老女人| 国产精品一区二区在线| 国产精品亚洲美女av网站| 国产精品第1页| 日韩不卡在线观看| 中文字幕一区二区三区电影| 国产成人亚洲综合| 亚洲图片在线综合| 欧美电影免费观看大全| 国产日韩欧美日韩| 国产美女精彩久久| 欧美亚洲另类激情另类| 国产性色av一区二区| 亚洲视频专区在线| 亚洲女人被黑人巨大进入al| 欧美自拍大量在线观看| 亚洲加勒比久久88色综合| 日韩精品在线播放| 亚洲国产精品推荐| 久久乐国产精品| 欧美www视频在线观看| 久久久久久av| 日韩中文娱乐网| 97av在线播放| 午夜欧美不卡精品aaaaa| 欧美刺激性大交免费视频| 久久精品夜夜夜夜夜久久| 国产日韩在线精品av| 亚洲香蕉在线观看| 亚洲国产一区二区三区四区|