ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Планирование заданий в Linux с помощью команды at

Как запланировать публикацию ваших постов в WordPress (шаг за шагом)

Команда at в Linux может использоваться для планирования заданий, которые не выполняются по регулярному расписанию.

Это можно сравнить с концепцией Crontab в Linux, которая является лучшим способом автоматизации повторяющихся задач.

В этой статье мы покажем, как вы можете использовать команду «at» для планирования выполнения задач и команд на определенное время в будущем.

 

Установка по команде в Linux

Прежде чем начать, вы должны проверить, установлено ли «at» в вашей системе. Он не установлен по умолчанию во всех операционных системах.

Вы можете проверить это, набрав:

at -V

 

Если программное обеспечение уже установлено, вернется номер версии. Если нет, его можно установить в системах на основе Debian, набрав:

sudo apt install at

 

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

 

Начало

Утилита at на самом деле представляет собой серию команд, которые работают вместе для планирования заданий. Как мы уже упоминали, at предпочтительнее для ситуаций, когда ваша задача больше «одноразовая», чем повторяющееся событие.

Мы составили таблицу с некоторыми основными командами, связанными с at.

команда функция
at позволяет пользователю планировать задачу
atq выводит список заданий в очередь для вошедшего в систему пользователя или всех пользователей, если они запускаются как sudo
atrm удаляет задания по указанному номеру задания
batch указывает системе запускать задание только в указанное время, если загрузка системы находится на определенном уровне (средняя загрузка <1,5)

 

Использование команды at в Linux для планирования заданий

Использование at имеет свой уникальный формат. Когда вы хотите запланировать работу, вы наберете в свой терминал:

at [time] [date/day]

 

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

Когда вы нажмете Enter, вам будет предложено ввести команды. Вы можете ввести столько, сколько хотите. Введите Ctrl + D, чтобы сохранить и выйти.

Позвольте нам показать это вам с примерами.

 

Пример 1. Введите время/дату, используя естественный язык

У вас есть много разных вариантов ввода времени. В отличие от crontab с его довольно сложной системой, основанной на звездочках, «at» распознает «человеческий» ввод более эффективно.

Есть много человеческих подобных выражений, которые могут быть поняты с помощью программного обеспечения. Многие из них зависят от региона. Он может распознавать такие распространенные выражения, как «полночь» или «полдень». Он также может различать AM и PM. Кроме того, он может распознавать различные форматы для дней и дат, включая сокращения.

Он также может использовать выражение «сейчас». Вы можете просто ввести команду, как показано ниже, и она будет запущена через 5 минут.

at now + 1 minutes
destroyer@andreyex:~$ at now + 1 min
warning: commands will be executed using /bin/sh
at> echo "Посмотри на себя!" > message.txt
at> <EOT>
job 8 at Mon Jan  6 02:59:00 2020

 

Скорее всего, вы можете игнорировать предупреждение о bin /sh . Это может вызвать головную боль, если вы используете другую оболочку . Подавляющее большинство дистрибутивов Linux поставляются с bash, поскольку системная оболочка обозначается как «sh» … Это долгая история.

Итак, прошло около минуты, верно? Проверьте каталог для нового файла.

У вас должен быть файл с именем ‘message.txt’, содержащий наш текст.

destroyer@andreyex:~$ ls m*
message.txt

 

Выглядит хорошо, но правильно ли он запечатлел наше сообщение? Давайте посмотрим содержимое файла :

destroyer@andreyex:~$ cat message.txt 
Посмотри на себя!

 

Пример 2. Использование указанного времени/даты

Для своей первой работы вы использовали «относительное» время «now + [time]». Это очень простой способ составить график работы, но вам может потребоваться конкретнее.

На этот раз давайте наметим 2 задания в разное время.

Вы можете использовать файл message.txt (созданный в предыдущем примере) для демонстрации. Каждое задание заменит содержимое файла.

Вы можете проверить текущее время в вашей системе Linux с помощью команды date.

Настройте первую работу на определенное время (через 5 минут):

destroyer@andreyex:~$ at 3:45 
warning: commands will be executed using /bin/sh
at> echo "5 минут спустя..." > message.txt
at> <EOT>
job 11 at Mon Jan  6 03:45:00 2020

 

Настройте второе задание на определенное время (через 10 минут):

destroyer@andreyex:~$ at 3:50
warning: commands will be executed using /bin/sh
at> echo "10 минут спустя..." > message.txt    
at> <EOT>
job 12 at Mon Jan  6 03:50:00 2020

 

Проверьте в 3:45:

destroyer@andreyex:~$ cat message.txt 
5 минут спустя...

 

Проверьте в 3:50:

destroyer@andreyex:~$ cat message.txt 
10 минут спустя...

 

 

Пример 3. Просмотр всех заданий в очереди с помощью atq

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

destroyer@andreyex:~$ atq
11    Mon Jan  6 03:45:00 2020 a destroyer
12    Mon Jan  6 03:50:00 2020 a destroyer

 

Каждое задание идентифицируется по идентификатору задания, назначенному времени и связанному пользователю.

Вы также можете просмотреть содержимое запланированного задания с опцией -c:

at -c jobnumber

 

 

Пример 4. Удаление запланированного задания с помощью atrm

Если вы решите отменить задание до его выполнения, это можно сделать, набрав команду с соответствующим идентификатором задания (который можно получить с помощью команды atq).

destroyer@andreyex:~$ atrm 11
destroyer@andreyex:~$ atq
12    Mon Jan  6 03:50:00 2020 a destroyer

 

Как видите, задание 11 было удалено из очереди.

 

Пример 5: использование файла для команды at

Возможно, у вас есть набор сценариев, которые вы хотите выполнять нерегулярно, и cron не подходит. Вы можете ввести несколько заданий без использования стандартного ввода.

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

Вы можете сэкономить время, перечислив необходимые сценарии в текстовом файле, выполнив их с помощью at.

destroyer@andreyex:~$ cat problem_employee_logs.txt 
path/to/get_browsing_history.sh
/whatever/path/get_activity_logs.sh

 

Вы поняли идею. Итак, теперь вы можете добавить -f к команде ‘at’ и включить имя файла после:

destroyer@andreyex:~$ at now + 2 minutes -f problem_employee_logs.txt 
warning: commands will be executed using /bin/sh
job 16 at Mon Jan  6 05:42:00 2020

 

Пример 6. Запуск задания, когда загрузка процессора падает ниже порогового значения.

Пакетные задания будут выполняться, когда средняя загрузка ЦП по умолчанию опустится ниже 1,5.

batch

 

Метод ввода пакетных заданий идентичен «at», за исключением того, что ему не нужно указывать время.

Если вы хотите изменить порог загрузки, вы можете сделать это с помощью следующей команды:

atd -l [n]

 

Где n – это порог загрузки, который вы хотите выбрать. Страница man рекомендует вам изменить его на значение выше n-1, где n – это количество процессоров в вашей системе .

 

Вывод

Спасибо за прочтение. Мы надеемся, что ваше понимание команды улучшилось. Если у вас есть какие-либо вопросы или вы хотите поделиться тем, как вы используете эту команду, сообщите нам! Оставьте комментарий ниже.

Exit mobile version