1. 程式人生 > >crontab 定時任務避免重複執行

crontab 定時任務避免重複執行

使用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命令執行指令碼可以防止迴圈執行週期內重複執行指令碼。