crontab 定时任务避免重复执行

    xiaoxiao2021-03-25  82

    使用crontab设置一个脚本每个一段时间自动执行一次,当脚本的执行时间超过crontab设置的时间间隔,那个脚本就会在同一时刻同时执行。比如设置crontab每隔五分钟执行一次task.sh:

    */5 * * * * /bin/bash /pathto/task.sh

    如果task.sh执行超过了5分钟,那么五分钟之后就会有两个task.sh在运行。不符预期。 拿下面执行10秒的脚本task.sh为例:

    #! /bin/bash echo haha sleep 10 echo hhheee

    如何防止10秒之内再次执行该脚本呢?

    方法一,在脚本中模拟加锁

    #! /bin/bash # check lock exist if [[ -f test.lock ]] then echo this file is already exists exit 1 else touch test.lock fi echo haha sleep 10 echo hhheee # remove the lock rm -f test.lock

    10秒只能该脚本不会重复执行。

    方法二, 使用flock命令

    在一个终端中执行:

    flock -xn test.lock -c 'sh task.sh'

    10s内,在第二个终端中,执行上面命令,发现执行失败。10s过后,再次执行,成功。

    所以,在crontab中使用flock命令执行脚本可以防止循环执行周期内重复执行脚本。

    转载请注明原文地址: https://ju.6miu.com/read-32753.html

    最新回复(0)