日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

flock文件锁的学习和应用

發(fā)布時(shí)間:2025/4/5 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 flock文件锁的学习和应用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。