脚本没有完成执行但cron作业再次启动

时间:2016-07-07 14:21:25

标签: shell hadoop cron hive apache-pig

我正在尝试运行一个执行我的shell脚本的cron作业,我的shell脚本正在使用hive&猪脚本。我将cron作业设置为每2分钟执行一次,但在我的shell脚本完成之前,我的cron作业再次启动是否会影响我的结果,或者一旦脚本完成执行,那么只有它才会启动。我在这里陷入了两难境地。请帮忙。 感谢

2 个答案:

答案 0 :(得分:2)

我认为有两种方法可以更好地解决这个问题,包括很长的路要走:

  • 很长的路(可能是最正确的):

    使用Luigi之类的东西来管理作业依赖关系,然后用Cron运行它(它不会运行多个同一个作业)。

    Luigi将为您处理所有工作依赖关系,您可以确保特定工作只执行一次。这需要更多的工作来设置,但它确实值得。

  • 短道:

    锁定文件已被提及,但您也可以在HDFS上执行此操作,这样做并不依赖于您从哪里运行cron作业。

    不是检查锁文件,而是在启动和完成作业时在HDFS上放置一个标志,并将其作为所有cron作业中的标准内容:

    #start at

    hadoop fs -touchz / jobs / job1 / 2016-07-01 / _STARTED

    #the finish

    hadoop fs -touchz / jobs / job1 / 2016-07-01 / _COMPLETED

    #然后检查它们(伪代码):

    if(!started&&!completed):run_job; add_completed; remove_started

答案 1 :(得分:1)

在脚本开头,请检查:

#!/bin/bash
if [ -e /tmp/file.lock ]; then
  rm /tmp/file.lock # removes the lock and continue
else
  exit # No lock file exists, which means prev execution has not completed.
fi

.... # Your script here

touch /tmp/file.lock

还有很多其他方法可以实现同样的目标。我举一个简单的例子。