Приложение подняли, но перевели на обслуживание: на каждый запрос оно отвечает maintenance с HTTP-статусом 503. Проверь, каким кодом curl завершается на такой ответ.
Спроси приложение на обслуживании
В ~/health-lab спроси приложение через curl дважды — без ключа -f и с ним — и посмотри код curl после каждого запроса.
Сначала предположи
Приложение отвечает статусом 503. Какой код curl напечатает первая команда, без -f?
Теперь начни упражнение, выполни команду и сверь прогноз с выводом.
Код curl говорит об обмене: подключился, отправил запрос, получил ответ — успех, какой бы статус ни стоял в ответе. Статус 503 — часть ответа, и без ключей curl его не оценивает.
Ключ -f (--fail) делает сбоем ответ со статусом 400 и выше: curl не печатает тело и завершается кодом 22.
Бывает, что сервер принял соединение и молчит. curl ждёт ответа, и проверка висит вместе с ним. Ключ --max-time 2 ограничивает весь запрос двумя секундами: по истечении тайм-аута curl завершается с кодом 28. Любую другую команду так же ограничивает timeout: timeout 5 команда прерывает её через пять секунд с кодом 124.
Healthcheck должен считать сбоем и ответ 503, и сервер, который принял соединение и молчит. Какой запрос ему подойдёт?
-
timeoutоборвёт молчащий сервер кодом 124, но ответ 503 без-fдля curl — успех с кодом 0. -
-fпоймает 503, но молчащего сервера curl будет ждать: ограничения времени здесь нет. -
На ответ 503 этот curl завершится кодом 0, а молчащего сервера будет ждать без конца.
-f делает сбоем ответ со статусом 400 и выше (код 22), а --max-time 2 обрывает молчащий сервер через две секунды (код 28). Вместе они дают ненулевой код в обоих случаях.