
at — это утилита командной строки, позволяющая планировать автоматическое выполнение различных команд и скриптов в определённое время и дату. Задания, созданные с помощью at выполняются только один раз, что делает её отличным инструментом для управления разовыми задачами, которые необходимо выполнить в точное время.
В этой статье мы объясним, как использовать at и сопутствующие утилиты batch , atq , atrm для просмотра, удаления и создания заданий, которые будут выполнены позднее.
Установка at
В зависимости от дистрибутива, at может присутствовать или отсутствовать в вашей системе Linux.
Если команда не установлена, вы можете легко установить ее с помощью менеджера пакетов вашего дистрибутива.
-
Установить
atUbuntu и Debiansudo apt updatesudo apt install at -
Установить
atCentOS и Fedorasudo yum install at
После установки пакета убедитесь, что atd (демон планирования) запущен и настроен на запуск при загрузке:
sudo systemctl enable --now atd
Как использовать команду at
Упрощенный синтаксис команды at выглядит следующим образом:
at [ OPTION... ] runtime
Команда at принимает дату и время ( runtime ) выполнения задания в качестве аргумента командной строки, а команду для выполнения вы вводите из стандартного ввода.
Например, давайте создадим задание, которое будет выполнено в 9:00 утра:
at 09:00
После нажатия клавиши Enter откроется приглашение на ввод команды at , которое обычно начинается с at> . Кроме того, появится предупреждающее сообщение с информацией об оболочке, в которой будет выполнена команда:
warning: commands will be executed using /bin/sh at>
Введите одну или несколько команд, которые вы хотите выполнить:
tar -xf /home/linuxize/file.tar.gz
После завершения ввода команд нажмите Ctrl-D чтобы выйти из командной строки и сохранить задание:
at> job 4 at Tue May 5 09:00:00 2020
Команда отобразит номер задания, а также время и дату выполнения.
Помимо ввода команды в командной строке at , существуют и другие способы передать нужную команду. Один из них — использовать команду echo и передать её по конвейеру at :
echo "command_to_be_run" | at 09:00
Другой вариант — использовать документ Here :
at 09:00 < command_to_be_run END
Чтобы читать команды из файла, а не из стандартного ввода, вызовите команду с опцией -f и указанием пути к файлу. Например, чтобы создать задание, которое запустит скрипт /home/linuxize/script.sh :
at 09:00 -f /home/linuxize/script.sh
По умолчанию, если команда выдаёт результат, at отправит пользователю электронное письмо с выводом после завершения задания. Вызовите at с опцией -M , чтобы отключить отправку уведомления по электронной почте:
at 09:00 -M
Используйте опцию -m для отправки электронного письма, даже если вывод отсутствует:
at 09:00 -m
batch команда
batch или её псевдоним at -b планирует задания и выполняет их в очереди пакетных заданий, когда позволяет уровень загрузки системы. По умолчанию задания выполняются, когда средняя загрузка системы ниже 1,5. Значение нагрузки можно указать при вызове демона atd . Если средняя загрузка системы выше указанного значения, задания будут ожидать в очереди.
Чтобы создать задание с помощью batch , передайте команды, которые вы хотите выполнить:
echo "command_to_be_run" | batch
Указание времени выполнения
Утилита at поддерживает широкий диапазон значений времени. Вы можете указать время, дату и шаг от текущего времени:
-
Время — чтобы указать время, используйте формат
HH:MMилиHHMM. Если вы предпочитаете 12-часовой формат времени, можно добавить «am» или «pm» после времени. Например, 10:30am или 6:45pm. Вы также можете использовать строки типаnow,midnight,noonилиteatime(16:00). Если задача или событие запланированы на время, которое уже прошло, они будут автоматически перенесены на то же время следующего дня. -
Дата — эта команда позволяет запланировать выполнение задания на заданную дату. Дату можно указать, указав название месяца, день недели и (необязательно) год. В качестве альтернативы, для указания даты можно использовать строки, например, «сегодня», «завтра» или «будний день». Дату также можно указать в формате
MMDD[CC]YY,MM/DD/[CC]YY,DD.MM.[CC]YYили[CC]YY-MM-DD. -
Приращение -
atтакже принимает приращение в форматеnow + count time-unit, гдеcount— это число, аtime-unitможет быть одной из следующих строк:minutes,hours,daysилиweeks.
Время, дату и приращение можно комбинировать. Вот несколько примеров:
-
Запланируйте работу на следующее воскресенье на десять минут позже текущего времени:
at sunday +10 minutes -
Запланируйте выполнение задания на 13:00 через два дня:
at 1pm + 2 days -
Запланируйте выполнение задания на 12:30 21 октября 2020 года:
at 12:30 102120 -
Запланируйте выполнение задания через час:
at now +1 hours
Вы также можете указать время и дату в формате [[CC]YY]MMDDhhmm[.ss] с помощью опции -t . Вот пример:
at -t 202005111321.32
Указание номера
По умолчанию задания, созданные с помощью at планируются в очереди с именем a , а задания, созданные с помощью batch планируются в очереди b .
Запросы могут иметь имена от a до z и A до Z Очереди с меньшими буквами выполняются с меньшей степенью приоритета, что означает, что они имеют приоритет над очередями с более высокими буквами.
Чтобы указать очередь для задания, используйте опцию -q , а затем имя нужной очереди. Например, если вы хотите добавить задание в очередь «L», выполните команду с опцией -q L :
at monday +2 hours -q L
Список ожидающих вакансий
Чтобы вывести список отложенных заданий пользователя, выполните команду atq или at -l :
atq
В результатах будут перечислены все задания, по одному в каждой строке. Каждая строка содержит номер задания, дату, время, букву очереди и имя пользователя.
9 Tue May 5 12:22:00 2023 a linuxize 12 Wed Oct 21 12:30:00 2023 a linuxize 15 Tue May 5 09:00:00 2023 a linuxize 6 Tue May 5 09:00:00 2023 a linuxize 13 Mon May 4 23:08:00 2023 a linuxize 11 Wed Jul 1 10:00:00 2023 a linuxize 4 Tue May 5 09:00:00 2023 a linuxize
При вызове atq от имени административного пользователя будут выведены отложенные задания всех пользователей.
Удаление отложенных заданий
Чтобы удалить отложенное задание, выполните команду atrm или at -r указав номер задания. Например, чтобы удалить задание с номером девять, выполните:
atrm 9
Ограничение пользователей
Файлы /etc/at.deny и /etc/at.allow позволяют контролировать, какие пользователи могут создавать задания с помощью команд at или batch . Эти файлы содержат список имён пользователей, по одному имени в каждой строке.
По умолчанию существует только файл /etc/at.deny , который пуст, что означает, что все пользователи могут использовать команду at . Если вы хотите запретить разрешение определённому пользователю, добавьте его имя в этот файл.
Если файл /etc/at.allow существует, использовать команду at смогут только пользователи, указанные в этом файле.
Если ни один из файлов не существует, использовать команду at смогут только пользователи с правами администратора.
Заключение
Команда at — полезная утилита, позволяющая планировать выполнение команд на более позднее время. В отличие от команды crontab , которая выполняет команды циклично, команда at выполняет команды однократно.
Чтобы узнать больше о различных параметрах команды at , введите man at в терминале. Откроется страница руководства со списком всех доступных параметров с подробными пояснениями.
Если у вас возникнут дополнительные вопросы или вам понадобится помощь по использованию команды at , пожалуйста, оставляйте комментарии.
Связанные руководства