Поиск по сайту:

Добавляйте команды Linux в очередь и выполняйте их одну за другой

Сегодня я наткнулся на классную утилиту командной строки Linux под названием "Task Spooler". Как следует из названия, диспетчер очереди задач — это пакетная система Unix, которую можно использовать для добавления команд Linux в очередь и выполнения их одну за другой в числовом порядке (точнее, в порядке возрастания). Пожалуйста, не путайте ее с командой 'at', которая используется для выполнения команд Linux в определенное время. В отличие от команды at, диспетчер очереди задач запускает команду немедленно из очереди, как только будет завершена предыдущая команда.

Эта утилита может быть очень полезна, когда вам нужно выполнить множество команд, но вы не хотите тратить время на ожидание завершения одной команды и выполнение следующей команды. Вы можете поставить их все в очередь, и диспетчер очереди задач будет выполнять их один за другим. Тем временем вы можете заняться другими делами. Каждый пользователь в каждой системе имеет свою очередь заданий. Это также очень полезно, когда вы знаете, что ваши команды зависят от большого количества оперативной памяти, большого использования диска, дают большой объем вывода или по какой-либо причине лучше не запускать их одновременно. Короче говоря, Task Spooler — это программа командной строки, которая ставит в очередь другие команды для пакетного выполнения.

В этом кратком руководстве я покажу вам, как установить и использовать диспетчер очереди задач в Unix-подобных операционных системах.

Установите диспетчер очереди задач в Debian, Ubuntu, Linux Mint

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

sudo apt-get install task-spooler

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

  • Как легко создавать пакеты Linux для нескольких платформ
  • Как собрать пакеты из исходного кода с помощью CheckInstall

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

Давайте посмотрим несколько практических примеров. Все представленные здесь примеры протестированы в системе Ubuntu 18.04 LTS.

Примечание. В системах Debian/Ubuntu диспетчер очереди задач следует запускать с помощью команды «tsp», поскольку существует другая программа с таким же именем, называемая ts (инструмент Time Stamping Authority ( клиент/сервер)). Для дистрибутивов Linux, отличных от Ubuntu/Debian, вы можете запустить его с помощью команды «ts».

Запустите команду tsp:

tsp

Сейчас в очереди ничего нет. Добавим несколько команд в очередь. Для этого запустите:

tsp echo Welcome OSTechNix
tsp echo "Hello World"

Теперь снова запустите команду tsp, чтобы просмотреть команды в очереди:

tsp

Пример вывода:

ID State Output E-Level Times(r/u/s) Command [run=0/1]
0 finished /tmp/ts-out.jpHIG1 0 0.01/0.00/0.00 echo Welcome OSTechNix
1 finished /tmp/ts-out.8H6LLB 0 0.00/0.00/0.00 echo Hello World

Как вы видите в приведенном выше выводе, каждая команда имеет уникальный идентификатор в (0, 1, 2... и т. д.) в порядке возрастания. Кроме того, он показывает текущее состояние команд (например, завершено или выполняется) в очереди. Команды echo очень простые и короткие, поэтому результат мы получили как «законченный».

Давайте запустим команду, выполнение которой займет больше времени. Взгляните на следующую команду:

find / -type f -printf '%T+ %p\n' | sort | head -n 20

Эта команда найдет и отобразит 20 самых старых файлов в корневой (/) файловой системе.

Теперь добавьте приведенную выше команду в очередь:

tsp find / -type f -printf '%T+ %p\n' | sort | head -n 20

Пример вывода:

2

Теперь запустите команду tsp, чтобы просмотреть список команд в очереди.

tsp

Пример вывода:

ID State Output E-Level Times(r/u/s) Command [run=1/1]
2 running /tmp/ts-out.79rMXn find / -type f -printf %T+ %p\n
0 finished /tmp/ts-out.jpHIG1 0 0.01/0.00/0.00 echo Welcome OSTechNix
1 finished /tmp/ts-out.8H6LLB 0 0.00/0.00/0.00 echo Hello World

Добавьте команды Linux в очередь с помощью диспетчера очереди задач

Как вы видите в приведенном выше выводе, команда с идентификатором 2 выполняется. Аналогичным образом вы можете добавить столько команд, сколько хотите запустить, с помощью диспетчера очереди задач.

Обновление:

Как заметил один из наших читателей в разделе комментариев, команду find следует запускать, как показано ниже:

tsp sh -c "find Downloads/ -type f -printf '%T+ %p\n' | sort | head -n 20"

Чтобы просмотреть выходные данные выполняемого задания и проверить, что происходит, введите следующую команду:

tsp -c 2

Здесь 2 — идентификатор запущенной команды. Нажмите CTRL+C, чтобы вернуться в терминал. Это не отменит выполняемую команду. Это всего лишь вернет вас обратно в Терминал. Задание по-прежнему будет выполняться в фоновом режиме.

Вы можете удалить команду (выполняющуюся, завершенную, поставленную в очередь) из очереди, используя флаг -r, за которым следует идентификатор, как показано ниже.

tsp -r 2

Приведенная выше команда удалит из очереди команду с идентификатором 2.

Чтобы очистить все команды из очереди, просто запустите:

tsp -C

Обратите внимание, что здесь C – это капитал. Приведенная выше команда очистит последние выполненные команды из очереди. Он не удалит ни запущенные команды, ни команды в очереди.

Помните, что вам нужно запускать диспетчер очереди задач в дистрибутивах, отличных от Debian/Ubuntu, с помощью команды ts.

Более подробную информацию можно найти на страницах руководства.

man ts

Или,

man tsp

Рекомендуем прочитать:

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

Заключение

Я считаю, что диспетчер очереди задач очень полезен, когда мне приходится запускать несколько команд. Я просто ленивый человек, который ждет завершения одной команды и выполняет другую. Используя диспетчер очереди задач, я поставил в очередь список команд, которые нужно выполнить, и он выполнял команды из очереди одну за другой в порядке возрастания. Я также могу в любое время просмотреть вывод любой запущенной команды, используя ее идентификатор. Имейте в виду, что он не будет запускать все команды одновременно. Вместо этого он будет запускать команды одну за другой. Тем не менее, Task Spooler предназначен для выполнения пакетных заданий.

Статьи по данной тематике