脚本没有完成执行,但 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
我正在尝试 运行 将执行我的 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