Введение
at
— это утилита командной строки, которая позволяет планировать запуск команд в определенное время. Задания, созданные с помощью at
, выполняются только один раз.
В этой статье мы объясним, как использовать at
и некоторые его утилиты, такие как batch
, atq
, atrm
, для просмотра, удаления и создания заданий для последующего запуска.
Установить в
В зависимости от дистрибутива at
может присутствовать или отсутствовать в вашей системе Linux.
Если at
не установлен, вы можете легко установить его с помощью менеджера пакетов вашего дистрибутива.
Установить на Ubuntu и Debian
sudo apt update
sudo apt install at
Установить на CentOS и Fedora
sudo yum install at
Демон Атд
После установки программы убедитесь, что демон atd
расписания запущен и настроен на запуск при загрузке:
sudo systemctl enable --now atd
Как использовать команду at
Упрощенный синтаксис команды at
выглядит следующим образом:
at [OPTION...] runtime
Команда at
принимает дату и время ( runtime
), когда вы хотите запустить задание (job), в качестве параметра командной строки.
Давайте создадим задание, которое будет выполняться в 9:00:
at 09:00
Как только вы нажмете Enter
, вам будет представлена командная строка at
, которая чаще всего начинается с at>
. Также отображается предупреждение с указанием оболочки, в которой будет выполняться команда:
warning: commands will be executed using /bin/sh
at>
Введите одну или несколько команд, которые вы хотите запустить:
tar -xf /home/noviello/file.tar.gz
Закончив ввод команд, нажмите Ctrl-D
, чтобы выйти из подсказки и сохранить процесс:
at> <EOT>
job 4 at Tue May 5 09:00:00 2020
Команда отобразит номер задания, а также время и дату выполнения.
Существуют и другие способы использования команды, которую вы хотите выполнить, помимо ввода команды at
. Один из способов — использовать echo
и перенаправить команду at
:
echo "command_to_be_run" | at 09:00
Другой вариант — использовать Heredoc:
at 09:00 <<END
command_to_be_run
END
Чтобы читать команды из файла, а не из стандартного ввода, вызовите команду с параметром -f
после пути к файлу. Например, чтобы создать задание, которое будет запускать скрипт /home/noviello/script.sh
:
at 09:00 -f /home/noviello/script.sh
По умолчанию, если команда производит выходные данные, они at
желанию отправляются пользователю по электронной почте после завершения задания. Вызовите at
с параметром -M
, чтобы скрыть уведомление по электронной почте:
at 09:00 -M
Используйте -m
для отправки электронного письма, даже если вывода нет:
at 09:00 -m
Пакетная команда
batch
или его псевдоним at -b
планирует задания и запускает их в пакетной очереди, когда это позволяет загрузка системы. По умолчанию задания запускаются, когда средняя загрузка системы меньше 1,5
. Значение загрузки можно указать при вызове демона atd
. Если средняя загрузка системы выше указанной, задания будут ждать в очереди.
Чтобы создать batch
задание, передайте команды, которые хотите запустить:
echo "command_to_be_run" | batch
Укажите время выполнения
Утилита at
принимает широкий диапазон спецификаций времени. Вы можете указать время, дату и шаг от текущего времени:
- Время: Чтобы указать время, используйте форму
HH:MM
илиHHMM
. Чтобы указать 12-часовой формат времени, используйтеam
илиpm
после времени. Вы также можете использовать такие строки, какnow
,midnight
,noon
или времяteatime
(16:00). Если указанное время истекло, задание будет запущено на следующий день. - Дата: команда позволяет запланировать выполнение задания на определенную дату. Дату можно указать, используя название месяца, за которым следует день и необязательный год. Вы можете использовать строки, например,
today
,tomorrow
или день недели. Дата также может быть указана в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
, запустите:
at monday +2 hours -q L
Список ожидающих заданий
Чтобы получить список ожидающих выполнения заданий пользователя, выполните atq
или at -l
:
atq
В выводе будут перечислены все задания, по одному в строке. Каждая строка включает номер задания, дату, время, букву очереди и имя пользователя.
9 Tue May 5 12:22:00 2020 a noviello
12 Wed Oct 21 12:30:00 2020 a noviello
15 Tue May 5 09:00:00 2020 a noviello
6 Tue May 5 09:00:00 2020 a noviello
13 Mon May 4 23:08:00 2020 a noviello
11 Wed Jul 1 10:00:00 2020 a noviello
4 Tue May 5 09:00:00 2020 a noviello
Когда 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