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

dsekswqp  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(413)

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

2ledvvac

2ledvvac1#

我认为有两种方法可以更好地解决这个问题,一种是长的方法,一种是短的方法:
很长的路(可能最正确):
使用类似luigi的工具来管理作业依赖关系,然后用cron运行它(它不会运行同一个作业中的多个)。
luigi将为您处理所有作业依赖关系,您可以确保特定作业只执行一次。准备起来要多花点功夫,但真的很值得。
捷径:
锁定文件已经提到过了,但是您也可以在hdfs上这样做,这样就不依赖于从何处运行cron作业。
在开始和完成作业时,不要检查锁文件,而是在hdfs上设置一个标志,并将此作为所有cron作业的标准:

开始时

hadoop fs-touchz/jobs/job1/2016-07-01/\u已启动

完成时

hadoop fs-touchz/jobs/job1/2016-07-01/\u已完成

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

如果(!开始&&!已完成):运行作业;添加完成;删除\u已开始

tzxcd3kk

tzxcd3kk2#

在脚本开始时,请检查:


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

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

相关问题