脚本没有完成执行,但cron作业再次开始
问题描述:
我想运行一个cron作业,它将执行我的shell脚本,我的shell脚本有配置文件&猪脚本。我将cron作业设置为每2分钟执行一次,但在我的shell脚本完成之前,我的cron作业再次启动会影响我的结果,或者一旦脚本完成其执行,那么只会启动它。我在这里有点困难。请帮忙。 感谢脚本没有完成执行,但cron作业再次开始
答
我认为有两种方式,以更好地解决这个问题,很长的路要走和一小段路:
-
朗方式(可能是最正确的):
使用类似Luigi管理工作的依赖性,然后用Cron运行它(它不会运行多个相同的工作)。
Luigi会为您处理所有的工作依赖关系,您可以确保某个工作只执行一次。这需要更多的工作来完成设置,但这确实是值得的。
-
快捷途径:
锁文件已经提到过,但你可以做到这一点对HDFS也这样,它不依赖于您运行从cron作业。
不是检查锁文件,把国旗HDFS当你开始和完成作业,并有本作中所有的cron作业的标准的事情:
#在启动
Hadoop的FS -touchz /职位/ JOB1/2016年7月1日/ _STARTED
#在最终
Hadoop的FS -touchz /职位/ JOB1/2016年7月1日/ _COMPLETED
#然后检查它们(伪代码):
if(!started & &!completed: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
有殊途同归的许多其他方面。我举一个简单的例子。
你希望你的cron作业只有在你先前执行完同一个脚本之后才能启动? – Fazlin
为执行创建一个锁定文件。根据您的要求,您可以简单地忽略执行,如果以前尚未完成(我个人喜欢这个)或只是等待锁被释放。 – satish
@Fazlin是的,我想流 – Ironman