flock文件锁的学习和应用
flock文件鎖 學(xué)習(xí)與應(yīng)用????
2016-9-20 ??
作用:
可以使用flock文件鎖,避免指定命令的同時(shí)執(zhí)行。(實(shí)現(xiàn)任務(wù)鎖定,解決沖突)
用法: ?
# flock -xn /opt/lock_file -c 'echo "123"' ?加了flock限制后,檢查到文件已被鎖定,則繼續(xù)等待或直接返回失敗。
說(shuō)明:
?1. 鎖文件不存在,會(huì)自動(dòng)創(chuàng)建。 ?
?2. 命令進(jìn)程執(zhí)行完畢后,鎖會(huì)自動(dòng)釋放。 ?
參數(shù)解釋:??
-s, --shared: 獲得一個(gè)共享鎖 (命令可以同時(shí)執(zhí)行) -x, --exclusive: 獲得一個(gè)獨(dú)占鎖 (鎖被釋放才會(huì)開(kāi)始執(zhí)行命令) -u, --unlock: 移除一個(gè)鎖(通常用不到,腳本執(zhí)行完會(huì)自動(dòng)釋放鎖) -n, --nonblock: 如果沒(méi)有立即獲得鎖,直接返回1失敗,不等待. (非阻塞模式) -w, --timeout: 如果沒(méi)有立即獲得鎖,等待指定時(shí)間s -o, --close: 在運(yùn)行命令前關(guān)閉文件的描述符號(hào)。用于如果命令產(chǎn)生子進(jìn)程時(shí)會(huì)不受鎖的管控 (表示當(dāng)執(zhí)行command前關(guān)閉設(shè)置鎖的FD,以使command的子進(jìn)程不保持鎖。) -c, --command: 在shell中運(yùn)行一個(gè)單獨(dú)的命令 -h, --help 顯示幫助 -V, --version: 顯示版本?
補(bǔ)充說(shuō)明: ?
共享鎖:允許多個(gè)線(xiàn)程同時(shí)獲取鎖,并發(fā)訪(fǎng)問(wèn) ?
獨(dú)占鎖
?
-o 舉例:??
不加-o參數(shù)。./down.sh執(zhí)行完畢后,鎖繼續(xù)保留。(nohup后臺(tái)運(yùn)行的進(jìn)程會(huì)繼續(xù)持有鎖)???
VM05:/opt/*/bin # lsof |grep /opt/test.lkVM05:/opt/*/bin # ./down.shVM05:/opt/*/bin # flock -x /opt/test.lk -c '/opt/*/*/run.sh';echo $? GATE START 0 VM05:/opt/*/bin # lsof |grep /opt/test.lk java 98329 root 3u REG 202,9 0 19 /opt/test.lk VM05:/opt/*/bin # ps 98329 PID TTY STAT TIME COMMAND 98329 pts/1 Sl 0:08 /usr/java/jdk1.6.0_29/bin/java -DProc=...? 加上-o參數(shù)。run.sh執(zhí)行完畢后,鎖釋放。(run.sh的子進(jìn)程不會(huì)持有鎖。)???
VM05:/opt/*/bin # ./down.shVM05:/opt/*/bin # lsof |grep /opt/test.lkVM05:/opt/*/bin # flock -xo /opt/test.lk -c '/opt/*/bin/run.sh';echo $? GATE START 0 VM05:/opt/*/bin # lsof |grep /opt/test.lk VM05:/opt/*/bin #?
? @其他具體實(shí)踐運(yùn)用:
?1、 crontab運(yùn)用flock防止重復(fù)執(zhí)行
? * * * * * (flock -xn ./test.lock -c "sh /root/test.sh") #-n 為非阻塞模式
?2、 機(jī)器down機(jī)自動(dòng)啟動(dòng)或重啟
? 可以在daemon開(kāi)始的時(shí)候, 獲取一個(gè)文件寫(xiě)鎖. 守護(hù)腳本也設(shè)置阻塞模式鎖, 一旦文件寫(xiě)鎖獲得成功, 則說(shuō)明daemon已經(jīng)掛了. 此時(shí)守護(hù)腳本重啟daemon并放棄寫(xiě)鎖.?
? flock -x ./test.lock -c "/usr/local/nginx/sbin/nginx" #去掉-n表示使用阻塞模式
轉(zhuǎn)載于:https://www.cnblogs.com/eaglediao/p/6501529.html
總結(jié)
以上是生活随笔為你收集整理的flock文件锁的学习和应用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Python基础(list和tuple)
- 下一篇: BZOJ 1226: [SDOI2009