at
— это утилита командной строки, которая позволяет вам планировать выполнение команд в определенное время. Задания, созданные с помощью at
, выполняются только один раз.
В этой статье мы расскажем , как использовать at
и его компаньоны утилитами batch
, atq
, atrm
просматривать, удалять и создавать новые рабочие места , которые должны выполняться в более позднее время.
Содержание
Установка at
В зависимости от дистрибутива at
может присутствовать или отсутствовать в вашей системе Linux.
Если at
не установлен, вы можете легко установить его с помощью диспетчера пакетов вашего дистрибутива.
- Установить
at
Ubuntu и Debiansudo apt update
sudo apt install at
- Установить
at
CentOS и 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> <EOT>
job 4 at Tue May 5 09:00:00 2020
Команда отобразит номер задания, время и дату выполнения.
Есть и другие способы , чтобы пройти команду , которую вы хотите запустить, помимо ввода команды в at
строке. Один из способов — использовать echo
и направить команду по at
:
echo "command_to_be_run" | at 09:00
Другой вариант — использовать здесь документ :
at 09:00 <<END
command_to_be_run
END
Чтобы читать команды из файла вместо стандартного ввода, вызовите команду с параметром -f
путь к файлу. Например, чтобы создать задание, которое будет запускать скрипт /home/linuxize/script.sh
:
at 09:00 -f /home/linuxize/script.sh
По умолчанию, если команда производит вывод, at
отправит электронное письмо с выводом пользователю после завершения задания. Invoke 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
после времени. Вы также можете использовать такие строки, какnow
,midnight
,noon
илиteatime
(16:00). По истечении указанного времени задание будет выполнено на следующий день. - Дата — команда позволяет запланировать выполнение задания на заданную дату. Дату можно указать, используя название месяца, за которым следует день и (необязательно) год. Вы можете использовать строки, например,
today
,tomorrow
или будний день. Дата также может быть указана вMMDD[CC]YY
,MM/DD/[CC]YY
,DD.MM.[CC]YY
или[CC]YY-MM-DD
. - Increment —
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 linuxize
12 Wed Oct 21 12:30:00 2020 a linuxize
15 Tue May 5 09:00:00 2020 a linuxize
6 Tue May 5 09:00:00 2020 a linuxize
13 Mon May 4 23:08:00 2020 a linuxize
11 Wed Jul 1 10:00:00 2020 a linuxize
4 Tue May 5 09:00:00 2020 a linuxize
Когда atq
вызывается от имени администратора, он перечисляет ожидающие задания всех пользователей.
Удаление незавершенных заданий
Чтобы удалить отложенное задание, atrm
команду atrm
или at -r
после которой atrm
номер задания. Например, чтобы удалить задание с номером девять, вы должны запустить:
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
в вашем терминале.
Если у вас есть вопросы, не стесняйтесь оставлять комментарии.
Спасибо за предоставленную информацию!