Linux下shell脚本在crontab中一个周期执行不完,下周期任务被重复执行的问题解决 - 文件锁 lock

Linux · Fecmall · 于 3年前 发布 · 1858 次阅读

shell脚本的执行可能会出现接口拉取网络较慢以及处理文件过大等问题导致脚本执行时间较长。这种情况下如果放置crontab中执行可能导致上个周期脚本未结束,但是下个周期又开始执行该脚本,导致了脏数据产生等问题。

解决方法:在crontab中添加flock进行一个文件锁的使用

使用方法如下:

*/5 * * * * /usr/bin/flock -xn /www/web/demo/fecfa/cover_check.lock -c '/bin/bash /www/web/demo/fecfa/addons/fecmall/fecfaa/shell/dailyStatistics.sh  >> /www/web_logs/fecshop/dailyStatistics.log 2>&1'

您需要先创建文件/www/web/demo/fecfa/cover_check.lock并设置可写。

-x代表 获取一个独占锁

-n代表 如果没有立即获得锁失败(本次不执行)

cover_check.lock 则是锁文件所要放置的位置,用于flock获得锁,判断本周期是否需要执行

''引号里面为要执行的命令

共收到 1 条回复
Fecmall#13年前 0 个赞

例子:

* * * * * /usr/bin/flock -xn /www/web_logs/task.lock -c '/bin/bash /www/web/demo/fecerp/addons/fecmall/fecerp/shell/task.sh  >> /www/web_logs/fecerp/task.log 2>&1'

详细步骤

mkdir /www/web_logs

touch /www/web_logs/task.lock
chmod 777 /www/web_logs/task.lock

touch /www/web_logs/fecerp/task.log
chmod 777 /www/web_logs/fecerp/task.log

chmod 755 /www/web/demo/fecerp/addons/fecmall/fecerp/shell/task.sh
添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册
Your Site Analytics