Практическое задание

Эта задача — шаг 26 курса «Bash-скрипты: от цикла до надёжного скрипта»

Повторяй с нарастающей паузой

сложно~12 мин

Команда /usr/local/bin/flaky.sh нестабильна: первые вызовы падают, а начиная с какой-то попытки — срабатывает. Напиши /root/retry.sh, который вызывает её повторно до пяти раз, делая между попытками паузу, удваивающуюся с каждым разом (1, 2, 4, …). Скрипт должен завершиться с кодом 0, как только команда отработает успешно, и с ненулевым — если все попытки исчерпаны. Паузу делай командой sleep. Сделай скрипт исполняемым.

Что потренируешь:
  • retry
  • экспоненциальная задержка
  • коды возврата
  • арифметическое расширение
  • циклы

Разбор темы

Повтор с нарастающей паузой (exponential backoff) — стандартный способ переживать временные отказы: сеть, недоступный сервис, конкурентная блокировка. Смысл роста задержки в том, чтобы не долбить перегруженную систему с одинаковой частотой и дать ей время восстановиться, а ограничение числа попыток гарантирует, что скрипт не зациклится навсегда. Условие успеха определяется кодом возврата (if команда; then), а не разбором вывода. В реальных реализациях к схеме добавляют случайный разброс (jitter), чтобы одновременно упавшие клиенты не возвращались синхронно.

Что проверяется

  1. скрипт отрабатывает успешно
  2. повторы идут до первого успеха и не дальше
  3. скрипт не зацикливается
  4. если все попытки неудачны — скрипт сдаётся с ошибкой
  5. число попыток соответствует заданию
  6. между попытками удваивающаяся пауза

Как это выглядит