Механизм повторения кривых

У меня есть script, который я запускаю для развертывания 2 веб-служб и внешнего приложения. script вызывает метод, который проверяет, работают ли 2 внутренних службы. Если это так, считайте развертывание успешным, в противном случае верните.

Для запуска двух служб иногда требуется больше времени, чем передняя часть. В настоящее время я включил вызов сна, чтобы отложить проверку веб-сервиса. Это позволяет им запускать время.

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

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

Кто-нибудь из вас решил эту проблему раньше? Я хочу понять, что я должен учитывать при его решении, например. повторить попытку, пока не получу HTTP 200 из моего сервиса?

Есть ли какие-либо предложения, как бы я это испытал? Мне нужно найти службу, которая была недоступна.

EDIT: Я вижу, что -retry реагирует только на переходные ошибки. Ошибка переходного процесса означает либо тайм-аут, либо код ответа FTP 4xx, либо код ответа HTTP 5xx ". Мой сервис может возвращать 404, поэтому повторение curl не является моим решением.

Ответ 1

Следующий оператор будет повторяться 5 раз или максимум 40 секунд с тайм-аутом соединения 5 секунд и без политики экспоненциального отката

curl --connect-timeout 5 \
    --max-time 10 \
    --retry 5 \
    --retry-delay 0 \
    --retry-max-time 40 \
    'http://your_url'


--max-time 10     (how long each retry will wait)
--retry 5         (it will retry 5 times)
--retry-delay 0   (an exponential backoff algorithm)
--retry-max-time  (total time before it considered failed)

Обратите внимание, что существует также --retry-connrefuse, который повторяет попытку, даже если в соединении отказано.

Ответ 2

Просто чтобы устранить любую возможную путаницу для любого нового...

Смотрите: https://curl.haxx.se/docs/manpage.html

- повторить

Если переходная ошибка возвращается, когда curl пытается выполнить передачи, он будет повторять это количество раз, прежде чем сдаваться. настройка число до 0 делает curl не повторять попытку (что является значением по умолчанию). Ошибка переходного процесса означает либо: тайм-аут, код ответа FTP 4xx или код ответа HTTP 5xx.

Когда curl собирается перезапустить передачу, он сначала будет ждать одну секунду а затем для всех предстоящих попыток удвоится время ожидания пока он не достигнет 10 минут, а затем будет задержка между остальная часть попыток. Используя -retry-delay, вы отключите эту экспоненциальный алгоритм отсрочки. См. также --retry-max-time, чтобы ограничить общее время, разрешенное для повторных попыток.

Если этот параметр используется несколько раз, будет использоваться последний.

Добавлено в 7.12.3.

Ответ 3

Если вы используете --max-time 10, это приведет к разрыву вашего соединения раньше, чем через 10 секунд, поэтому это не поможет при загрузке.

После этого произойдет повторная попытка 300 раз с задержкой 5 с и таймаутом соединения 30 с

curl \
    --connect-timeout 30 \
    --retry 300 \
    --retry-delay 5 \
    URL