我是靠谱客的博主 从容雪糕,最近开发中收集的这篇文章主要介绍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.lk
VM05:/opt/*/bin # ./down.sh
VM05:/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.sh
VM05:/opt/*/bin # lsof |grep /opt/test.lk
VM05:/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文件锁的学习和应用的全部内容,希望文章能够帮你解决flock文件锁的学习和应用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部