Механизм повторения кривых
У меня есть 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