2009-03-17 4 views
2

У меня есть работа cron, которая работает каждый час. Он обращается к XML-каналу. Если хml-канал недоступен (что, кажется, происходит один раз в день или около того), он создает файл «сбоя». Этот файл «сбоя» содержит некоторые метаданные и стирается в следующий час, когда скрипт запускается снова, и XML-канал работает снова.Я хочу сделать условный cronjob

То, что я хочу, состоит в том, чтобы выполнить второе задание cron, которое выполняется через несколько минут после первого, заглядывает в каталог файла с ошибкой и, если оно есть, повторяет задание 1-го часа.

Я знаю, как настроить задания cron, я просто не знаю, как сделать сценарий условным. Неужели я об этом совершенно не так?

ответ

1

В команде запуска, попробуйте:

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

Он работает retrycommand если failurefile существует

+0

Я думаю, что это отвечает на вопрос, что ОП просил +1 – Learning

+0

обернуть все в/bin/bash -c кажется глупым, поскольку cron поддерживает переменную SHELL. – ashawley

+0

Большое спасибо! –

2

Возможно. Возможно, вам было бы лучше, если бы исходный скрипт засыпал и повторил (ограниченное) количество раз.

Сон является команда оболочки и оболочки поддерживают зацикливание, так это может выглядеть примерно так:

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

Почему бы вам не настроить свой сценарий на файл статуса, когда он был успешно завершен. Попросите его запустить каждые 5 минут и сначала проверьте скрипт, чтобы посмотреть, не осталось ли файла статуса менее 60 минут, а если он молод, тогда выйдите, если он старый, затем выберите.

+0

В некоторых средах «задание» меняется каждый час (например, потянув временную дамп), чтобы это могло запутаться. – MarkusQ

0

Я согласен с MarkusQ, что вы должны повторить попытку в исходной задаче вместо создания другой работы, чтобы посмотреть первую работу.

Взгляните на этот инструмент, чтобы повторить попытку проще: https://github.com/kadwanev/retry

Вы можете просто обернуть оригинальный хрон в повторной попытки очень легко и окончательное существование файла отказа будет указывать, если он не даже после повторных попыток.

Смежные вопросы