去发现生活中的美好,记录生活中的点点滴滴

增加Linux定时任务文件锁

linux admin 76℃

常规的定时任务,直接在crontab -e里面设定即可,但是如果频率过高(如每分钟执行一次),导致重复执行,会浪费系统资源,导致一些并发症,如占用数据库连接,进程数过高等等。
知道了原因,那怎么解决呢?其实只要预防重复执行即可,也就是上一次脚本没执行完,则等待执行完后,再启动新的执行,可以用redis锁或者文件锁,这里只举例文件锁:

#!/bin/bash
# /bin/bash /www/sh/test.sh #需要定时执行的脚本


filepath=filelock.txt
echo "$filepath"
if [ ! -f "$filepath" ]
then
    cat > $filepath << END_TEXT
$(date "+%Y-%m-%d %H:%M:%S")
/bin/bash /www/sh/test.sh
rm -f $filepath
END_TEXT
else
# If the file exists
now_time1=$(date "+%Y-%m-%d %H:%M:%S")
echo $now_time1
now_time_int=$(date +%s -d "$now_time1")

record_time=$(cat $filepath)
echo $record_time
record_time_int=$(date +%s -d "$record_time")
diff_time=$((now_time_int - record_time_int))
echo $diff_time

if [ $diff_time -gt 7200  ]  
then
cat > $filepath << END_TEXT
$(date "+%Y-%m-%d %H:%M:%S")
END_TEXT
/bin/bash /www/sh/test.sh
rm -f $filepath
else
exit
fi
fi

为预防执行过程没有删掉文件,这里加上一个锁超时处理,超过半小时会把文件锁释放。

转载请注明:永盟博客 » 增加Linux定时任务文件锁

喜欢 (4)