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表示使用阻塞模式
flock文件锁的学习和应用的更多相关文章
- linux使用flock文件锁解决crontab冲突问题
* * * * * flock -xn /dev/shm/redis.lock -c "/usr/local/bin/redis-server" 可以用flock命令,配合使用rs ...
- linux使用flock文件锁
使用linux flock 文件锁实现任务锁定,解决冲突 格式: flock [-sxun][-w #] fd# flock [-sxon][-w #] file [-c] command flock ...
- php flock 文件锁
于php中文件锁函数flock函数用法简介,希望通过本文的介绍大家对于Linux方面能够更加的了解 flock (PHP 4, PHP 5) flock — 轻便的咨询文件锁定 说明 bool flo ...
- 使用linux flock文件锁实现任务锁定避免计划任务程序冲突
格式:flock [-sxun][-w #] fd#flock [-sxon][-w #] file [-c] command选项-s, --shared: 获得一个共享锁 -x, --exclusi ...
- flock文件锁
linux中的定时任务crontab会定时执行一些脚本,但是脚本的时间往往无法控制,当脚本的执行时间过长,可能会导致上一次任务的脚本还没执行完,下一次任务的脚本又开始执行的问题.这种情况下会出现一些并 ...
- 关于flock文件锁的阻塞与非阻塞
阻塞模式,程序会一直等待. <?php $fp = fopen("lock.txt", "r"); if(flock($fp,LOCK_EX)) { // ...
- 20175226 2018-2019-2 《Java程序设计》第六周学习总结
20175226 2018-2019-2 <Java程序设计>第六周学习总结 教材学习内容总结 内部类与异常类 内部类:Java支持在一个类中定义另一个类(可以是static类) 外嵌类的 ...
- flock
为了确保操作的有效性和完整性,可以通过锁机制将并发状态转换成串行状态.作为锁机制中的一种,PHP的文件锁也是为了应对资源竞争.假设一个应用场景,在存在较大并发的情况下,通过fwrite向文件尾部多次有 ...
- 20165223 《JAVA程序设计》第五周学习总结
教材学习内容总结 第七章要点 内部类 匿名类 异常类 断言 第十章要点 File类 文件字节/字符的输入.输出流 缓冲流 随机流 数组流 数据流 对象流 序列化和对象克隆 使用Scanner解析文件 ...
随机推荐
- Pod 私有仓库构建
Pod 私有仓库构建 创建`私有仓库索引库`(iOS) 添加`私有仓库索引库`到本地repo管理 创建自己的`组建库工程 上传`组建库工程`到`私有仓库索引库` App工程调用`组建库工程` 目的 私 ...
- 【转】WebResource实现在自定义控件中内嵌JS文件
在类库中的资源 其他项目中要使用 需要嵌入才行 参考文献:WebResource实现在自定义控件中内嵌JS文件 1. WebResource简介 ASP.NET(1.0/1.1)给我们提供了一个开发 ...
- mock.js使用教程
转载自:https://blog.csdn.net/qq_42205731/article/details/81705350 cdn引入文件 :<script src="http:// ...
- sql (5) 左右连接
左连接 SQL LEFT JOIN LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行.语法SELECT colu ...
- Java迷宫代码,广度优先遍历,最短路径
使用一个队列,采用层层扩张的方式,寻找迷宫最优的路径信息,再用一个迷宫节点数组记录行走信息方向常量定义: public interface Constant { // 右方向 int RIGHT = ...
- 下载mysql出现的问题
报错------>解决方法
- 【未完成】Jmeter接口自动化测试:参数化设置
1. 从CSV文件读取参数 创建一个CVS文件,文件第一行不写参数名,直接从参数值开始,每一列代表一个参数 在测试计划或者线程组中,添加一个配置元件-->CSV 数据文件设置 Filename: ...
- 云-腾讯云-短信:短信(SMS)
ylbtech-云-腾讯云-短信:短信(SMS) 快速稳定.简单易用.触达全球的短信服务,支持国内短信.语音短信与国际短信 1.返回顶部 1. 腾讯云短信 SMS 简介 腾讯云短信(Short Mes ...
- 1.1_springboot2.x与缓存原理介绍&使用缓存
一.springboot与缓存介绍&使用缓存 1.JSR107 JAVA Cahing定义了5个核心接口,分别是CachingProvider.CacheManager.Cache.Entry ...
- sql server2014显示sa无法登录的错误
博主用的是sql serser2014,不过这个问题的方法也适用于2012等其他版本. 当用sa登录的时候,提示如下错误: A connection was successfully establis ...