Как запланировать выполнение задач с помощью команды At в Linux

12 set 2022 4 min di lettura
Как запланировать выполнение задач с помощью команды At в Linux
Indice dei contenuti

Введение

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

Support us with a

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.