Я хочу сделать условный Cronjob - PullRequest
2 голосов
/ 17 марта 2009

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

Я хочу сделать задание 2-го cron, которое запускается через несколько минут после первого, ищет в каталоге файл «fail» и, если оно есть, повторяет задание 1-го cron.

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

Ответы [ 4 ]

2 голосов
/ 17 марта 2009

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

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

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 голос
/ 17 марта 2009

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

1 голос
/ 17 марта 2009

В качестве команды для запуска попробуйте:

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

Запускает команду повтора, если существует файл сбоя

0 голосов
/ 03 апреля 2015

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

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

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

...