开发者社区> 科技探索者> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

crontab任务冲突

简介:
+关注继续查看

在 Linux 下使用 crontab 执行定时任务,如果任务自身运行时间超过任务执行的间隔时间,就有可能导致两次任务发生冲突,请问如何控制前一个任务执行完后再启动下一个任务?


      加个文件锁就OK了。每次任务执行时先判断锁文件是否存在,存在则退出任务,不存在则建立锁文件,任务执行完毕时删除该文件。在超出crontab执行的间隔时间的情况下,如果你还想继续执行之前没有执行的任务,则需要在脚本中判断当次任务执行时间,如果超过了crontab的间隔时间,那么在当前任务结束时进行系统调用执行该定时任务。


flock使用

  flock,建议性锁,不具备强制性。一个进程使用flock将文件锁住,另一个进程可以直接操作正在被锁的文件,修改文件中的数据,原因在于flock只是用于检测文件是否被加锁,针对文件已经被加锁,另一个进程写入数据的情况,内核不会阻止这个进程的写入操作,也就是建议性锁的内核处理策略。


-s, --shared:    获得一个共享锁  

-x, --exclusive: 获得一个独占锁  

-u, --unlock:    移除一个锁,通常是不需要的,脚本执行完会自动丢弃锁  

-n, --nonblock:  如果没有立即获得锁,直接失败而不是等待  

-w, --timeout:   如果没有立即获得锁,等待指定时间  

-o, --close:     在运行命令前关闭文件的描述符号。用于如果命令产生子进程时会不受锁的管控  

-c, --command:   在shell中运行一个单独的命令  


[root@db52 tmp]# cat /tmp/test.sh

#!/bin/bash


echo "Hello World"

sleep 10


[root@db52 tmp]# crontab -l

#crond-id-001:time sync

*/5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1


#crond-id-002:test

* * * * * /usr/bin/flock -xn /tmp/test.lock -c "/bin/sh /tmp/test.sh" >/dev/null 2>&1

本文转自写个博客骗钱博客51CTO博客,原文链接http://blog.51cto.com/dadonggg/1959089如需转载请自行联系原作者


菜鸟东哥

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
linux增加crontab任务
记录一次增加定时任务的过程,这里简单记录下防止遗忘。
26 0
cron和crontab
crontab -l 列出目前的计划任务(时程表) crontab -e 编辑计划任务   计划任务的格式如下: f1 f2 f3 f4 f5 program 其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。
692 0
Crontab 命令介绍
一.  Crontab 介绍        crontab命令的功能是在一定的时间间隔调度一些命令的执行。   1.1 /etc/crontab 文件        在/etc目录下有一个crontab文件,这里存放有系统运行的一些调度程序。
742 0
crontab用法
crontab  名称 : crontab   使用权限 : root用户和crontab文件的所有者   语法 :   crontab [-e [UserName]|-l [UserName]|-r [UserName]|-v [UserName]|File ]   说明 :   crontab 是用来让使用者在固定时间或固定间隔执行程式之用,换句话说,也就是类似使用者的时程表。
604 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载