zoukankan      html  css  js  c++  java
  • 用flock命令解决Linux计划任务重复执行

    在做计划任务的时候,可能由于某些问题,任务没有执行完成,导致任务重复的运行,解决这个问题,只需要一个flock命令就可以了。

    flock --help
    flock (util-linux-ng 2.17.2)
    Usage: flock [-sxun][-w #] fd#
    flock [-sxon][-w #] file [-c] command...
    flock [-sxon][-w #] directory [-c] command...
    -s --shared Get a shared lock #获得一个共享锁
    -x --exclusive Get an exclusive lock #获得一个独占锁,这是默认的
    -u --unlock Remove a lock #删除一个锁,通常是不需要的,因为在文件关闭时锁会自动删除
    -n --nonblock Fail rather than wait #如果没有立即获得锁,直接失败而不是等待
    -w --timeout Wait for a limited amount of time #如果没有立即获得锁,等待指定时间
    -o --close Close file descriptor before running command #在执行命令之前关闭保持锁的文件描述符
    -c --command Run a single command string through the shell #在shell中运行一个单独的命令
    -h --help Display this text #显示帮助
    -V --version Display version #显示版本

    例:

    我要用rsync计划任务做同步,写了一个日志切割脚本logsplit.sh,设置了30分钟同步一次服务端,但是可能由于其他某些因素导致,30分钟内没有同步完成,后台还会继续执行此计划任务,此时就能看到两个rsync同步同时在跑,这时候我们就需要flock命令来解决问题了。

    原来我的计划任务:

    */30 * * * * /www/logspli.sh

    使用flock后的计划任务:

    */30 * * * * flock -xn /tmp/demo.lock -c /www/logspli.sh

    这样的话,当前计划任务whsir.sh如果没有运行完,下一个任务会判断demo.lock被锁定,直接失败,等待下次在判断。

  • 相关阅读:
    Java 中无参带返回值方法的使用
    Java 中无参无返回值方法的使用
    如何定义 Java 中的方法
    Java 中的二维数组
    使用 foreach 操作数组
    使用 Arrays 类操作 Java 中的数组
    如何使用 Java 中的数组
    Java 循环语句之多重循环
    UML常用图的几种关系的总结
    JAVA 对象引用,以及对象赋值
  • 原文地址:https://www.cnblogs.com/zhaojingyu/p/8955851.html
Copyright © 2011-2022 走看看