脚本未完成执行,但 cron 作业再次启动



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

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

  • 路漫漫其修远兮(可能是最正确的):

    使用类似 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(!开始 &&!完成): run_job; add_completed; remove_started

在脚本开始时,检查:

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

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

最新更新