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

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

评论 ( 0) •  分享 •  链接 •  2012-01-21 
4个答案
票 数 
  • Eclipse

    2 票

  • Eclipse
    1939

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

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

    1 票

  • 张洪保
    12.64K

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

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

    0 票

  • 天梦
    241

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

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

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

    0 票

  • gipsa
    1

可以考虑用一个 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

你可能感兴趣的:(Linux,Shell)