Команда at в Linux может использоваться для планирования заданий, которые не выполняются по регулярному расписанию.
Это можно сравнить с концепцией Crontab в Linux, которая является лучшим способом автоматизации повторяющихся задач.
В этой статье мы покажем, как вы можете использовать команду «at» для планирования выполнения задач и команд на определенное время в будущем.
Прежде чем начать, вы должны проверить, установлено ли «at» в вашей системе. Он не установлен по умолчанию во всех операционных системах.
Вы можете проверить это, набрав:
at -V
Если программное обеспечение уже установлено, вернется номер версии. Если нет, его можно установить в системах на основе Debian, набрав:
sudo apt install at
Если вы используете другой дистрибутив Linux, то вам, возможно, придется изменить эту команду, чтобы отразить менеджер пакетов, используемый вашим дистрибутивом.
Утилита at на самом деле представляет собой серию команд, которые работают вместе для планирования заданий. Как мы уже упоминали, at предпочтительнее для ситуаций, когда ваша задача больше «одноразовая», чем повторяющееся событие.
Мы составили таблицу с некоторыми основными командами, связанными с at.
команда | функция |
---|---|
at | позволяет пользователю планировать задачу |
atq | выводит список заданий в очередь для вошедшего в систему пользователя или всех пользователей, если они запускаются как sudo |
atrm | удаляет задания по указанному номеру задания |
batch | указывает системе запускать задание только в указанное время, если загрузка системы находится на определенном уровне (средняя загрузка <1,5) |
Использование at имеет свой уникальный формат. Когда вы хотите запланировать работу, вы наберете в свой терминал:
at [time] [date/day]
Время является обязательным, но дата является необязательной. Если ничего не введено, будет сделано предположение на основе текущей даты и системного времени.
Когда вы нажмете Enter, вам будет предложено ввести команды. Вы можете ввести столько, сколько хотите. Введите Ctrl + D, чтобы сохранить и выйти.
Позвольте нам показать это вам с примерами.
У вас есть много разных вариантов ввода времени. В отличие от 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 Посмотри на себя!
Для своей первой работы вы использовали «относительное» время «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 минут спустя...
В любое время вы можете проверить запланированные задания с помощью команды 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
Если вы решите отменить задание до его выполнения, это можно сделать, набрав команду с соответствующим идентификатором задания (который можно получить с помощью команды atq).
destroyer@andreyex:~$ atrm 11 destroyer@andreyex:~$ atq 12 Mon Jan 6 03:50:00 2020 a destroyer
Как видите, задание 11 было удалено из очереди.
Возможно, у вас есть набор сценариев, которые вы хотите выполнять нерегулярно, и 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
Пакетные задания будут выполняться, когда средняя загрузка ЦП по умолчанию опустится ниже 1,5.
batch
Метод ввода пакетных заданий идентичен «at», за исключением того, что ему не нужно указывать время.
Если вы хотите изменить порог загрузки, вы можете сделать это с помощью следующей команды:
atd -l [n]
Где n – это порог загрузки, который вы хотите выбрать. Страница man рекомендует вам изменить его на значение выше n-1, где n – это количество процессоров в вашей системе .
Вывод
Спасибо за прочтение. Мы надеемся, что ваше понимание команды улучшилось. Если у вас есть какие-либо вопросы или вы хотите поделиться тем, как вы используете эту команду, сообщите нам! Оставьте комментарий ниже.