linux crontab定时任务与flock

发布于 2022-09-04 10:04:17 字数 581 浏览 29 评论 0

各位大虾好,本菜鸟最近遇到一个问题!

由于开发在写模块的时候,忽视一个比较不常见的错误,所以现在需要我们运维配合开发写一个暂时性脚本,脚本名叫log499.sh。脚本执行下来大约需要4分钟左右。但是crontab的频率还是一分钟,为了防止出现脚本运行冲突的问题。我就效仿http://chuansong.me/n/2856351...使用了flock,在crontab里写的语句是:

          • flock -xn /tmp/log499.lock -c 'sh /mnt/log499.sh >> /mnt/499.log 2>&1';

其中/tmp/log499.lock是一个空文件。

后来我启动这个crontab,发现果然只会在后台运行一个脚本,但是当运行一次之后,到了下一次该运行脚本的时间,却不再运行了,也就是说crontab只生效了一次,请问这是为啥?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

紧拥背影 2022-09-11 10:04:17

我已经解决了上面的问题,那就是在脚本里添加“删除lock文件,新建lock文件”的语句。我发现每次lock文件是新的时候才会触发crontab。

从图可见,只要检测是当前时间出现499 就会触发一个叫nginxchen.sh的脚本,这个脚本执行时间大约8分钟。
图片描述

图片描述

柠檬 2022-09-11 10:04:17

说实话,我也不知道你这个具体是什么原因,借用一句话:实践是检验真理的唯一标准,因此我模拟了楼主的场景

1.编写一个执行超过2分钟的脚本,然后执行

clipboard.png

2.放到crontab
*/1 * * * * flock -xn /root/xx.lock -c 'sh /root/xx.sh >>/tmp/xx.log 2>&1'
clipboard.png

3.查看crontab执行内容

clipboard.png

可以发现,并没有楼主所说的问题

因此有以下建议:
1.编写一个简短的脚本在服务器上面测试,如果不行,就换台服务器,看看是否状况相同
2.查看 /mnt/499.log 日志有无异常输出
3.查看进程是否一直在运行或者卡死导致crontab无法拿到锁

就以上这些了,如果楼主自己找到原因,不要忘记贴出来啊

萤火眠眠 2022-09-11 10:04:17

Crontab 改成下面的试试:

* * * * * flock -w0 /tmp/log499.lock -c 'sh /mnt/log499.sh >> /mnt/499.log 2>&1';
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文