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

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

晚风撩人 发布于 2016-12-26 字数 167 浏览 1084 回复 4

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

发布评论

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

评论(4

瑾兮 2017-07-20 4 楼

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

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

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

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

甜柠檬 2017-05-29 3 楼

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

偏爱自由 2017-05-25 2 楼

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

晚风撩人 2017-01-16 1 楼

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

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