常规的定时任务,直接在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定时任务文件锁