zoukankan      html  css  js  c++  java
  • 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表示使用阻塞模式

  • 相关阅读:
    802.1x协议解析
    网上疯传河南高考零分作文:兔子 你傻啊?!
    802.1x协议解析
    图像旋转控件 TRotateImage Ver1.54(支持D3~D2010)
    如何在Windows下搭建Android开发环境(转)
    自制的小工具软件鼠标取色器
    【三九智慧】一卡通接口的 Delphi封装与测试
    自制的小工具软件鼠标取色器
    【三九智慧】一卡通接口的 Delphi封装与测试
    webservice soap hessian
  • 原文地址:https://www.cnblogs.com/eaglediao/p/6501529.html
Copyright © 2011-2022 走看看