timeout: остановить зависшую команду через заданное время
timeout запускает программу с лимитом времени и отправляет сигнал, если срок истёк. Это защищает cron и shell-скрипты от бесконечно зависающих подключений или внешних процессов. ????? ??????????? ?????????? ???????? ?????? ??????? ? ????????? ?????? ? ??????? ?????.
Рабочий пример
timeout --signal=TERM --kill-after=5s 30s ./backup.sh
status=$?
if [ \"$status\" -eq 124 ]; then
echo 'backup exceeded time limit'
fiКод 124 обычно означает, что истёк timeout; если программа сама вернула 124, обработайте результат отдельно. --kill-after завершает процесс принудительно после grace периода.
Частый вопрос
Как сохранить обычный код выхода процесса?
Опция --preserve-status сохраняет код дочерней команды. Чтобы различать timeout, проверьте завершение по сигналу или используйте явную обёртку.