flock文件锁的学习和应用
flock文件鎖 學習與應用????
2016-9-20 ??
作用:
可以使用flock文件鎖,避免指定命令的同時執行。(實現任務鎖定,解決沖突)
用法: ?
# flock -xn /opt/lock_file -c 'echo "123"' ?加了flock限制后,檢查到文件已被鎖定,則繼續等待或直接返回失敗。
說明:
?1. 鎖文件不存在,會自動創建。 ?
?2. 命令進程執行完畢后,鎖會自動釋放。 ?
參數解釋:??
-s, --shared: 獲得一個共享鎖 (命令可以同時執行) -x, --exclusive: 獲得一個獨占鎖 (鎖被釋放才會開始執行命令) -u, --unlock: 移除一個鎖(通常用不到,腳本執行完會自動釋放鎖) -n, --nonblock: 如果沒有立即獲得鎖,直接返回1失敗,不等待. (非阻塞模式) -w, --timeout: 如果沒有立即獲得鎖,等待指定時間s -o, --close: 在運行命令前關閉文件的描述符號。用于如果命令產生子進程時會不受鎖的管控 (表示當執行command前關閉設置鎖的FD,以使command的子進程不保持鎖。) -c, --command: 在shell中運行一個單獨的命令 -h, --help 顯示幫助 -V, --version: 顯示版本?
補充說明: ?
共享鎖:允許多個線程同時獲取鎖,并發訪問 ?
獨占鎖
?
-o 舉例:??
不加-o參數。./down.sh執行完畢后,鎖繼續保留。(nohup后臺運行的進程會繼續持有鎖)???
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參數。run.sh執行完畢后,鎖釋放。(run.sh的子進程不會持有鎖。)???
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 #?
? @其他具體實踐運用:
?1、 crontab運用flock防止重復執行
? * * * * * (flock -xn ./test.lock -c "sh /root/test.sh") #-n 為非阻塞模式
?2、 機器down機自動啟動或重啟
? 可以在daemon開始的時候, 獲取一個文件寫鎖. 守護腳本也設置阻塞模式鎖, 一旦文件寫鎖獲得成功, 則說明daemon已經掛了. 此時守護腳本重啟daemon并放棄寫鎖.?
? flock -x ./test.lock -c "/usr/local/nginx/sbin/nginx" #去掉-n表示使用阻塞模式
轉載于:https://www.cnblogs.com/eaglediao/p/6501529.html
總結
以上是生活随笔為你收集整理的flock文件锁的学习和应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python基础(list和tuple)
- 下一篇: VMware vSphere Clien