脚本没有完成执行,但 cron 作业再次开始

Script didn't Finish execution but cron job started again

我正在尝试 运行 将执行我的 shell 脚本的 cron 作业,我的 shell 脚本包含 hive 和 pig 脚本。我将 cron 作业设置为每 2 分钟执行一次,但在我的 shell 脚本完成之前,我的 cron 作业再次启动是否会影响我的结果,或者一旦脚本完成执行,它就会启动。我在这里有点进退两难。请帮忙。 谢谢

在脚本的开头,检查一下:

#!/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

还有很多其他方法可以达到同样的效果。我举个简单的例子。

我认为有两种方法可以更好地解决这个问题,一个是长路,一个是短路:

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

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

    Luigi 会为你处理所有的工作依赖,你可以确保一个特定的工作只执行一次。设置工作有点多,但确实值得。

  • 捷径:

    已经提到了锁定文件,但您也可以在 HDFS 上执行此操作,这样它就不会取决于您 运行 cron 作业的来源。

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

    # 开始时

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

    # 结束时

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

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

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