ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)
Вторник, 10 декабря, 2024
Сегодня у нас 1 праздник:
10 декабря — в честь дня рождения первого программиста Ады Августы Байрон Кинг, графини Лавлейс 10 декабря 1815 года. Ада написала первую в истории компьютерную программу для аналитической машины Бэббиджа, первой ввела термины «рабочие ячейки», «цикл» и др. Предсказала появление современных компьютеров как многофункциональных машин не только для вычислений, но и для работы с графикой, звуком. В её честь назван один из известных языков программирования Ада.

Команда Timeout в Bash без ненужной задержки

Команда Timeout в Bash без ненужной задержки

В Bash иногда вам может понадобиться выполнить команду, выполнение которой занимает много времени, и вы можете не захотеть ждать ее завершения бесконечно. Одним из решений этой проблемы является использование команды timeout, которая ограничивает количество времени, в течение которого может выполняться команда. В этой статье мы обсудим, как тайм-аут команды в Bash без ненужной задержки.

 

Тайм-аут команды в Bash

Чтобы использовать тайм-аут команды в Bash, мы можем использовать команду «timeout». Команда «timeout» по умолчанию доступна не во всех системах, но ее можно установить с помощью менеджера пакетов в большинстве дистрибутивов Linux, вот синтаксис команды «timeout»:

timeout [OPTION] DURATION COMMAND [ARG]

 

Здесь «OPTION» — это необязательный аргумент, определяющий поведение команды тайм-аута, «DURATION» — это ограничение времени для запуска команды, а «COMMAND [ARG]» — это команда и ее аргументы, которые мы хотим запустить.

 

Например, предположим, что мы хотим запустить команду «sleep» на пять секунд, но мы хотим, чтобы тайм-аут команды истек через три секунды, и вот пример сценария оболочки:

#!/bin/bash
echo "Запуск команды sleep с тайм-аутом 3 секунды..."
timeout 3s sleep 5s
echo "Команда Sleep завершена."

 

Здесь мы указали продолжительность тайм-аута как 3 секунды, а продолжительность команды «sleep» как 5 секунд. Команда «timeout» остановит команду «sleep» через 3 секунды, даже если команда «sleep» обычно выполняется в течение 5 секунд.

Чтобы предотвратить ненужную задержку при использовании команды «timeout», мы можем использовать опцию «-k». Параметр «-k» указывает сигнал, который будет отправлен команде, если она превысит лимит времени ожидания. Этот сигнал приведет к немедленному завершению команды, вместо ожидания ее корректного завершения.

Например, предположим, что мы хотим запустить команду «sleep» на пять секунд, но мы хотим установить тайм-аут команды через три секунды и отправить сигнал SIGINT, если он превышает лимит времени ожидания. Мы можем сделать это, выполнив следующую команду:

#!/bin/bash
echo "Запуск команды sleep с тайм-аутом 3 секунды и сигналом SIGINT через 2 секунды”
timeout -k 2s 3s sleep 5s
echo "Команда Sleep завершена."

 

Здесь мы указали продолжительность тайм-аута как 3 секунды и сигнал, который будет отправлен как SIGINT, если он превышает предел тайм-аута. Параметр «-k 2s» указывает, что сигнал SIGINT должен быть отправлен после двух секунд ограничения времени ожидания.

 

Заключение

Команда timeout в Bash — это полезный инструмент, который может помочь вам более эффективно выполнять команды и предотвратить ненужные задержки. Используя команду «timeout» и параметр «-k», вы можете ограничить количество времени, в течение которого команда может выполняться, и отправить сигнал для ее немедленного завершения, если она превышает лимит времени ожидания. Это поможет вам сэкономить время и более эффективно запускать сценарии.

Exit mobile version