Использование timeout в Linux с примерами

Вот вы пользователь Linux машины. И вот вам захотелось запустить какую-нибудь команду только на определенное время, и вы задаете вопрос - как это сделать? А вот как - использовать команду timeout.

icon strelka icons icons

узнай больше на курсе

Онлайн-курс по Linux
Освой терминал, службы и администрирование Linux: 2 месяца онлайн, практика на своём сервере и сертификат. Открой программу.
Подробнее о курсе
Полный курс по сетевым технологиям
Разберись в TCP/IP, коммутации и маршрутизации с нуля: 2 месяца онлайн, лабы и сертификат. Открой программу и выбери свой тариф.
Подробнее о курсе
DevOps-инженер с нуля
Освой Linux, Docker, Kubernetes и CI/CD и собери свой пайплайн: 4 месяца онлайн, практика и сертификат. Смотри программу и тарифы.
Подробнее о курсе

Как взять timeout - об использовании команды

Базовый синтаксис

Как и следовало ожидать, синтакс у команды экстремально прост: сама команда timeout - опции - длительность выполнения (можно даже с единицами измерения) - целевая команда

Единицы измерения для указания длительности:

  • s - секунды (­стоит по умолчанию)
  • m - минуты
  • h - часы
  • d - дни

Если вы не укажете никакого параметра по длительности, команда не будет активирована.

Примеры команд:

  • timeout 5 ping 1.1.1.1 - пингуем 1.1.1.1 5 секунд
  • timeout 5m ping 1.1.1.1 - пингуем 1.1.1 5 минут
  • timeout 5.5h ping 1.1.1.1 - 5,5 часов пингуем 1.1.1

Если у вас есть необходимость, можно запустить команду с добавкой sudo (если для целевой команды требуются права суперпользователя):

sudo timeout 100 tcpdump -n -w dump.pcap


Сообщение с космосом или отправка определенного сигнала исполняемому процессу

Если вы не указали какой-то особый сигнал, по умолчанию передается SIGTERM (сигнал о том, что надо бы мягко терминировать процесс). Однако, если вы укажете ключ -s после команды timeout, вы можете указать любой другой допустимый сигнал. К примеру: sudo timeout -s SIGKILL ping 1.1.1.1 или sudo timeout -s 9 ping 1.1.1.1

Обе команды выше идентичны, и если вы хотите увидеть весь список сигналов, просто введите kill -l

Использование timeout в Linux с примерами

Как убить процесс, если он завис

Как вы уже поняли, SIGTERM - это сигнал, который отправляется после истечения таймаута, но он легко может быть проигнорирован процессом, и тогда процесс не остановится. Для уверенности в смерти процесса, нужно использовать ключ -k и некое временное значение. Тогда после окончания таймаута будет отправляться сигнал SIGKILL, который процесс не сможет проигнорировать при всем желании. В примере ниже команда выполняется одну минуту, и, если в течение 10 секунд после окончания таймаута она не "умирает", отправляется сигнал SIGKILL и "добивает" процесс:

sudo timeout -k 10 1m ping 1.1.1.1


Сохраняем статус

Команда timeout всегда возвращает значение 124 после истечения указанного времени или возвращает статус "exit" управляемой команды (той, что вы вводите после команды timeout). Таким образом, вы можете использовать ключ --preserve-status:

timeout --preserve-status 10 ping 1.1.1.1


Запуск команды явно, а не за кулисами

По умолчанию, timout работает в бэкграунде, и если вы хотите обратного (вдруг после запуска управляемой команды потребуется какой-нибудь пользовательский ввод), нужно использовать ключ -foreground:

timeout --foreground 10m ./bestscripteva.sh


Заключение

В 99% процентов случаев команда timeout требует всего двух аргументов и ни одного факта: времени исполнения и самой исполняемой команды. Однако, вы теперь знаете и другие фишки использования этой замечательной команды.

Ссылка
скопирована
Получите бесплатные уроки на наших курсах
Все курсы
icon strelka icons icons

узнай больше на курсе

Онлайн-курс по Linux
Освой терминал, службы и администрирование Linux: 2 месяца онлайн, практика на своём сервере и сертификат. Открой программу.
Подробнее о курсе
Полный курс по сетевым технологиям
Разберись в TCP/IP, коммутации и маршрутизации с нуля: 2 месяца онлайн, лабы и сертификат. Открой программу и выбери свой тариф.
Подробнее о курсе
DevOps-инженер с нуля
Освой Linux, Docker, Kubernetes и CI/CD и собери свой пайплайн: 4 месяца онлайн, практика и сертификат. Смотри программу и тарифы.
Подробнее о курсе
Python программист с нуля
Напиши первый код и собери проекты на Python: 4 месяца онлайн в своём темпе, практика и сертификат. Смотри программу и тарифы.
Подробнее о курсе
Онлайн-курс по кибербезопасности
Научись защищать сети и данные и разбирать атаки: 2 месяца онлайн, практика в лабах и сертификат. Открой программу и тарифы.
Подробнее о курсе
Онлайн-курс по сетевой безопасности
Научись защищать сеть: firewall, VPN, сегментация и мониторинг. 2 месяца онлайн, практика и сертификат. Смотри программу курса.
Подробнее о курсе
Еще по теме:
Разбираем 7 ключевых принципов Linux, которые помогают новичкам перестать бороться с системой и начать понимать, как она на самом деле работает.
Узнайте про 5 полезных Linux - команд: tldr, timeout, ncdu, fd и trash, которые упрощают жизнь при работе в CLI
Что позволяет называть один API как REST API, а другой нет? Сейчас попробуем разложить все по полочкам, чтобы ты на собесе жидко не споткнулся о такую, казалось бы, простую тему.
Узнайте, как работают сетевые порты в Linux, какие бывают типы портов, и как управлять ими с помощью команд netstat, ss, ufw и iptables
Рассказываем, как появился nginx, его отличия от apache, для чего нужен nginx и какие у него преимущества
ОСЕННИЕ СКИДКИ
30%
40%
50%
До конца акции: 30 дней 24 : 59 : 59