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文件锁的学习和应用相关推荐

  1. Linux flock文件锁详解

    摘要1:https://www.cnblogs.com/zhaojingyu/p/8955851.html 摘要2:https://www.cnblogs.com/wangxusummer/p/493 ...

  2. linux使用flock文件锁解决脚本周期内未执行完重复执行

    linux使用flock文件锁解决脚本周期内未执行完重复执行 关于flock flock 是对于整个文件的建议性锁.也就是说,如果一个进程在一个文件(inode)上放了锁,那么其它进程是可以知道的.( ...

  3. PHP flock文件锁详解介绍

    PHP flock文件锁详解介绍 www.111cn.net 编辑:angel 来源:转载 为了确保操作的有效性和完整性,可以通过锁机制将并发状态转换成串行状态.作为锁机制中的一种,PHP的文件锁也是 ...

  4. php 查看文件锁定状态_PHP flock 文件锁详细介绍

    flock (PHP 4, PHP 5) flock - 轻便的咨询文件锁定 说明 bool flock ( int $handle , int $operation [, int &$wou ...

  5. 关于flock文件锁的阻塞与非阻塞

    阻塞模式,程序会一直等待. <?php $fp = fopen("lock.txt", "r"); if(flock($fp,LOCK_EX)) { // ...

  6. NIO FileChannel中的文件锁lock 学习笔记

    排它锁:又叫独占锁.对文件加排它锁后,该进程可以对此文件进行读写,该进程独 占此文件,其他进程不能读写此文件,直到该进程释放文件锁. 共享锁:某个进程对文件加共享锁,其他进程也可以访问此文件,但这些进 ...

  7. 通过文件锁 Lockfile/flock 让脚本单实例运行

    2019独角兽企业重金招聘Python工程师标准>>> 1.Perl File::Lockfile 模块 用Perl写了一些监控脚本,放在crontab中调度执行.有时候会发现一个脚 ...

  8. golang下文件锁的使用

    前言 题目是golang下文件锁的使用,但本文的目的其实是通过golang下的文件锁的使用方法,来一窥文件锁背后的机制. 为什么需要文件锁 只有多线程/多进程这种并发场景下读写文件,才需要加锁, 场景 ...

  9. 【C语言 Linux系统开发 视频课程学习笔记】

      学习的课程在b站:史上最强最细腻的linux嵌入式C语言学习教程[李慧芹老师]   感谢李老师!感谢up主!   本篇博客只是收集一下学习过程中遇到的函数和其他知识点,并不会详细展开.某个函数的具 ...

最新文章

  1. [特征工程系列五]基于蒙特卡洛搜索树的半自动特征工程方案
  2. 华为自带时钟天气下载_华为EMUI10的最大亮点是什么?
  3. 2.5.2 MySQL二进制日志介绍
  4. 技术动态 | 知识图谱的策展
  5. java父类shape_为什么该父类无法调用其子类.__ShapeCircle_public_perimeter_getType_shapej__169IT.COM...
  6. (八)用于人脸识别的Web API
  7. 麒麟V10系统密码策略修改
  8. UI库colorui的使用————小程序
  9. 考勤系统 服务器管理,zktime5.0考勤管理系统
  10. 设置定时器,持续调用接口
  11. 读书寄语:这一年,谢谢自己
  12. C#视频处理,调用强大的ffmpeg
  13. 《卓有成效的管理者》——学习心得(七)
  14. python 画心_python画心性线
  15. C++ Virtual 完美诠释
  16. 智能灯杆网关有什么必备功能
  17. 2021年有哪些能用的活体人物虚拟主播
  18. 手推车轮 trolley wheel
  19. StumbleuponAnalysis--逻辑回归二元分类
  20. PS学习笔记二:跟着李涛学PS第二讲——绘画与修饰工具

热门文章

  1. ACM基础题 - 去除字符序列中的几个字符
  2. Asp.net Eval 学习总结
  3. C# Win32 API 应用
  4. 学习笔记94—所有用过SCI-hub的科研工作者都应该知道的事
  5. 修改IIS默认的30M
  6. java高级之Io流
  7. agc015D A or...or B Problem
  8. 地址总线与数据传送机制
  9. Mathematica干涉图处理
  10. Perl新接触的小命令