我想制作一个有条件的cronjob

时间:2009-03-17 17:03:20

标签: bash unix scripting cron

我有一个每小时运行一次的cron作业。它访问xml提要。如果xml提要是不可用的(这似乎每天发生一次),则会创建一个“失败”文件。此“失败”文件中包含一些元数据,并在脚本再次运行并且XML源再次运行时的下一个小时被删除。

我想要的是制作第二个cron作业,在第一个作业后运行几分钟,查看目录中的“失败”文件,如果在那里,则重试第一个cron作业。

我知道如何设置cron作业,我只是不知道如何使这样的脚本有条件。我是以完全错误的方式解决这个问题吗?

4 个答案:

答案 0 :(得分:2)

可能。也许你最好做的就是让原始脚本睡眠并重试(有限次数)。

Sleep是一个shell命令,shell支持循环,所以它看起来像:

for ((retry=0;retry<12;retry++)); do
    try the thing
    if [[ -e my_xlm_file ]]; then break; fi
    sleep 300 
    # five minutes later...
    done

答案 1 :(得分:1)

作为要运行的命令,请尝试:

/bin/bash -c 'test -e failurefile && retrycommand -someflag -etc'

如果存在故障文件,则运行retrycommand

答案 2 :(得分:1)

为什么不在设置脚本成功完成后触摸状态文件。让它每5分钟运行一次,然后对脚本进行第一次检查,看看状态文件是否小于60分钟,如果是年轻,则退出,如果是旧的,则获取。

答案 3 :(得分:0)

我同意MarkusQ你应该在原来的工作中重试,而不是创造另一份工作去看第一份工作。

请查看此工具,以便更轻松地重试:https://github.com/kadwanev/retry

您可以非常轻松地将原始cron包装在重试中,并且失败文件的最终存在将指示它是否在重试后失败。