linuxcrontab防止周期内为执行完成重复执行

更新时间:2023-06-04 17:40:48 阅读: 评论:0

linuxcrontab防⽌周期内为执⾏完成重复执⾏
问题的背景:
阳江旅游
我们常常需要通过crontab部署某个脚本运⾏某些定时任务,但在实际的过程中,⼀旦处理不好可能导致在同⼀时刻出现脚本的多个运⾏副本,⽐如crontab的调度是每5 分钟运⾏⼀次脚本,如果运⾏的脚本能够在5分钟内处理完任务并退出,则没问题,同⼀时刻最多只有⼀个脚本在运⾏,但如果脚本如果⽆法在5分钟内处理完任务并退出,则意味着在下⼀个5分钟,脚本⼜会被crontab调起来,出现了同⼀时刻有2个甚⾄更多的脚本事例在运⾏,对应⼀些依赖关系,需要串⾏处理的脚本来说,可能会导致数据相互覆盖等问题。
李玉刚哪里人为了解决这个问题,脚本必须能够⾃我保护,即在启动之前判断是否已经有脚本启动了,若当前已经有脚本启动了,则虽然crontab调度到该脚本,但脚本⾃⾝会马上退出。
解决问题的思路很多,其中⼀种⽐较简便的是:使⽤⽂件锁,在linux中,提供了flock命令,具体格式如下:
1,  flock [-sxon] [-w timeout] lockfile [-敬畏生命作文
2,  flock [-sxun] [-w timeout] fd
杂音
选项:
-s, --shared: 获得⼀个共享锁
-x, --exclusive: 获得⼀个独占锁
-u, --unlock: 移除⼀个锁,脚本执⾏完会⾃动丢弃锁
新闻专业主义-n, --nonblock: 如果没有⽴即获得锁,直接失败⽽不是等待
-w, --timeout: 如果没有⽴即获得锁,等待指定时间
-o, --clo: 在运⾏命令前关闭⽂件的描述符号。⽤于如果命令产⽣⼦进程时会不受锁的管控
-c, --command: 在shell中运⾏⼀个单独的命令
-h, --help 显⽰帮助
-V, --version: 显⽰版本
土豆丝怎么做好吃锁类型:
电脑缓存
共享锁:多个进程可以使⽤同⼀把锁,常被⽤作读共享锁
独占锁:同时只允许⼀个进程使⽤,⼜称排他锁,写锁。
这⾥我们需要同时只允许⼀个进程使⽤,所以使⽤独占锁。
修改后的定时任务如下:⽇志为了⽅便排查问题
---------------------
劝课* * * * * flock -xn /tmp/test.lock -c "timeout 200 php /home/app/email.php >> /home/log/test.log 2>&1"
开⼼吗 ?

本文发布于:2023-06-04 17:40:48,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/987401.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:脚本   获得   问题   进程   处理
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图