Как установить ограничение по времени для команд Linux

Для системных администраторов, отвечающих за управление серверами Linux, управление ресурсами является важной задачей. Иногда команды Linux занимают огромную часть системных ресурсов, и их необходимо остановить.

К счастью, вы можете ограничить время выполнения ваших команд с помощью таких утилит, как timelimit . В этой статье мы обсудим, почему вы должны добавлять ограничения по времени к своим командам и как добавить ограничение по времени с помощью таких команд, как timelimit и timeout.

Зачем ограничивать время выполнения команды?

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

Во-вторых, ограниченные по времени задачи, такие как передача файлов, завершаются через определенный период, но их процессы не останавливаются немедленно. Чтобы ограничить использование программой дополнительного времени процессора и памяти, вы можете добавить ограничение, которое остановит процесс после завершения передачи.

Добавить ограничение с помощью команды тайм-аута

Команда timeout – это первый выбор многих пользователей Linux, которые добавляют в свои команды ограничение по времени. Поскольку этот инструмент является частью пакета GNU Core Utilities , он предустановлен почти в каждом дистрибутиве Linux.

Основной синтаксис команды тайм-аута:

 timeout limit command

… где limit – это количество времени, в течение которого должна выполняться команда, а command – это команда Linux, которую вы хотите выполнить с ограничением по времени.

Например, если вы хотите получить подробную информацию о процессе, используя команду top в течение 10 секунд:

 timeout 10s top

Верхняя команда бесконечна, и вы должны вручную выйти из нее, используя Ctrl + C. Вышеупомянутая команда будет запускаться сверху в течение 10 секунд, и как только таймер истечет, тайм-аут остановит ее выполнение. Обратите внимание, что для тайм-аута в качестве единицы времени по умолчанию используются секунды , что означает, что 10 и 10 – это одно и то же.

Вы также можете использовать m , h и d для минут , часов и дней соответственно.

Отправка сигналов об уничтожении вручную с тайм-аутом

По умолчанию команда timeout отправляет SIGTERM в качестве сигнала уничтожения. SIGTERM расшифровывается как Signal Terminate, что немедленно завершает процесс.

Вы также можете отправлять другие сигналы, используя флаг -s . Например, чтобы отправить сигнал SIGKILL:

 timeout -s SIGKILL 10 top

Также возможно указание сигнала с его номером сигнала. Следующая команда также отправляет сигнал SIGKILL верхней команде.

 timeout -s 9 10 top

… где 9 – номер сигнала для SIGKILL.

Чтобы получить список всех доступных сигналов:

 kill -l

Некоторые команды не останавливаются полностью даже после добавления ограничения по времени. В таких ситуациях добавление сигнала уничтожения с командой тайм-аута по умолчанию решает проблему.

 timeout -k 15 10 top

Вышеупомянутая команда сначала запустит верхнюю команду в течение 10 секунд, и если команда не остановится, она отправит процессу сигнал уничтожения через 15 секунд.

Узнать больше: как убить неотвечающие программы в Linux

Ограничение времени выполнения команд с помощью timelimit

В отличие от команды timeout, timelimit не входит в число стандартных пакетов, предустановленных в дистрибутивах Linux. Следовательно, вам придется вручную установить ограничение по времени в вашей системе.

Для установки в дистрибутивах на основе Debian:

 sudo apt install timelimit

Timelimit недоступен в официальных репозиториях Arch. Но вы можете установить его с помощью диспетчера пакетов AUR, например yay .

 sudo yay -S timelimit

Связанный: Как установить пакеты в Arch Linux

Для установки в Fedora:

 sudo dnf install timelimit

В RHEL и CentOS:

 sudo yum install timelimit

В качестве альтернативы, если вы по-прежнему не можете установить пакет в своей системе, загрузите исходный код с официального сайта и установите его вручную.

Скачать : timelimit

Чтобы запустить команду top в течение 10 секунд с использованием timelimit:

 timelimit -t10 top

Timelimit принимает несколько аргументов, таких как warntime , warnsig , killtime и killsig . Если пользователь не предоставляет эти аргументы, используются их значения по умолчанию: warntime = 3600 секунд, warnsig = 15 , killtime = 120 и killsig = 9 .

Управление сроком службы команды в Linux

Мониторинг команд и контроль над процессами становится важным, если ваша Linux-машина имеет ограниченные ресурсы. Такие утилиты, как timeout и timelimit, спасают жизнь, поскольку позволяют добавлять ограничения по времени к вашим командам.

Как и во время выполнения команд, вы также можете ограничить экранное время вашей системы. Если вы являетесь родителем, который не хочет, чтобы ваш ребенок тратил ненужное время на компьютер, ограничение экранного времени – наиболее подходящий вариант.