Иногда команда может зависнуть: сетевой запрос, backup, healthcheck, rsync, миграция или скрипт в CI. Если не ограничить время выполнения, job может висеть бесконечно.
Простой пример:
curl https://api.example.com/health
Если соединение подвиснет, следующий шаг pipeline может так и не начаться.
Для таких случаев есть timeout:
timeout 10s curl https://api.example.com/health
Теперь команда получит максимум 10 секунд.
Это удобно для healthcheck-ов:
timeout 5s ./check-service.sh
И для команд внутри CI/CD:
timeout 2m ./run-migrations.sh
Если команда не завершилась вовремя, timeout остановит её и вернёт ошибочный exit code. Это можно обработать:
if ! timeout 10s curl -f http://localhost:8080/health; then
echo "service is not ready"
exit 1
fi
Для более жёсткого завершения можно указать сигнал:
timeout -s KILL 30s ./worker-test.sh
Но обычно лучше начинать с обычного timeout, чтобы процесс успел завершиться аккуратно.
➡️ DevOps Ready | #совет
