zoukankan      html  css  js  c++  java
  • flock文件锁

    linux中的定时任务crontab会定时执行一些脚本,但是脚本的时间往往无法控制,当脚本的执行时间过长,可能会导致上一次任务的脚本还没执行完,下一次任务的脚本又开始执行的问题。这种情况下会出现一些并发问题,严重时会导致出现脏数据或性能瓶颈的恶性循环。

    通过使用flock建立排他锁可以规避这个问题

    #!/bin/sh
    echo "---------------------------"
    echo "start at `date '+%Y-%m-%d %H:%M:%S'` ..."
    sleep 90
    echo "finished at `date '+%Y-%m-%d %H:%M:%S'` ..."
    #crontab -e
    
    */1 * * * *  flock -xn /dev/shm/test.lock -c "sh /root/scripts/flock.sh >> /tmp/flock.log"

    -x --exclusive 获得一个独占锁

    -n --nonblock 如果没有立即获得锁,直接失败而不是等待

    -c --command 在shell中运行一个单独的命令

    flock.log输出:

    ---------------------------
    start at 2018-08-21 13:10:01 ...
    finished at 2018-08-21 13:11:31 ...
    ---------------------------
    start at 2018-08-21 13:12:01 ...
    finished at 2018-08-21 13:13:31 ...
    ---------------------------
    start at 2018-08-21 13:14:01 ...
    finished at 2018-08-21 13:15:31 ...
    ---------------------------
    start at 2018-08-21 13:16:01 ...
    finished at 2018-08-21 13:17:31 ...
    

    观察日志定时任务还是以90秒一次在执行,而不是定时任务的每60秒执行一次

  • 相关阅读:
    【2017.12.02普及组模拟】送快递
    【NOIP2013模拟联考7】OSU
    顺序表元素位置倒置示例c++实现
    c++字符串排序
    JAVA实现四则运算的简单计算器
    JAVA图形小动画之简单行星运动
    JAVA多线程编程
    ege图形库之简单贪吃蛇(c++)
    ege图形库之动画排序
    c语言中一种典型的排列组合算法
  • 原文地址:https://www.cnblogs.com/Template/p/9515407.html
Copyright © 2011-2022 走看看