crontab 执行定时任务如何控制前一个任务执行完后再启动下一个任务?

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

评论 (0) •   •  链接 •  2012-01-21 
4个答案

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

评论 (0) •  链接 • 2012-02-13 

你可以用队列形式设置定时任务,这样先来先执行后来后执行;或者弄个cron配置文件设置每个任务的依赖关系,比如你如果知道那个任务大概超出了间隔时间,就把它后面的任务与之设置成依赖关系,这样这个任务必须执行完后面的才执行。这样避免任务冲突!

评论 (0) •  链接 • 2012-01-21 

crontab的确只能在指定的时间进行对应的任务,但是办法还是有的,可以使用一个标志位(创建一个文件或者文件中特定的内容)来实现控制:
比如计划任务A和B,其中B必须在A后执行才能执行:
1、设置好Crontab的内容,分别是A和B的对应时间。
2、然后A在执行后会创建一个文件,B脚本中在执行前检查这个文件是否存在,如果不存在的话,可以将B程序设计成周期性检测(这样子的话就不会因为A还没有执行完成导致B脚本跳过)

这种方法挺不错的,当然是依靠Crontab的前提下,其实我感觉你甚至自己写个定时计划任务算了,可以不依靠系统本身的crontab功能的。

评论 (0) •  链接 • 2012-12-22 

可以考虑用一个 run.sh 来代理定时任务的启动。

crontab中写作: 
1 1 * * * run.sh task_path.sh >> log_file 2>&1

在 run.sh 中用 ps 来检测 task_path 是否已经在运行,进而决定是否启动task_path.sh。

这种方法,除了可以控制任务的运行外,还可以做一些数据投递,监控定时任务的运行情况。

评论 (0) •  链接 • 2014-06-24
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值