В Linux, когда мы хотим заставить наш компьютер выполнять задачи автоматически, мы используем нечто, называемое планировщик. Это все равно что сказать компьютеру: «Сделай это в это время». Это облегчает нашу работу, поскольку нам не нужно помнить о необходимости выполнять эти задачи самостоятельно. Один из способов сделать это – использовать команду at
. Команда at
может служить альтернативой команде cron, когда необходимо выполнить задачу только один раз в определенное время в будущем.
Команда «at
« позволяет запланировать выполнение задач на определенное время. Так, если мы хотим, чтобы компьютер сделал что-то вроде создания резервной копии или отправки сообщения электронной почты, мы можем использовать команду at
, чтобы указать ему, когда это сделать. Это похоже на установку будильника для компьютера, чтобы он выполнял задания.
Что такое команда Linux – at?
Команда at в Linux используется для планирования выполнения одноразовой задачи в определенное время в будущем. Она позволяет указать конкретное время выполнения команды или скрипта.
Команда at
может быть полезна для автоматизации одноразовых задач, таких как резервное копирование файлов, запуск скриптов или отправка электронной почты.
Что использовать cron или at?
При планировании задач вы можете столкнуться с терминами «cron « и «at « и задаться вопросом о различиях между командами cron
и at
в среде Linux.
Команда at
и команда cron
используются для планирования задач в Linux, но они имеют явные различия в том, как они работают и когда их лучше использовать.
Утилита cron
позволяет планировать повторяющиеся задачи через определенные промежутки времени, в то время как команда at
позволяет указать одноразовые действия, которые должны быть выполнены в нужное время. Например, с помощью команды crontab
можно запланировать ежедневное резервное копирование на 2 часа ночи, что обеспечит его многократное выполнение. И наоборот, с помощью команды at
можно создать напоминание о более поздней встрече в течение дня для однократного выполнения.
По сути, команду at
мы обычно используем для одноразовых задач, запланированных на определенное время, а команду cron
– для автоматизированных, повторяющихся задач, которые должны выполняться регулярно.
Выбор между ними зависит от характера ваших задач и частоты их выполнения.
Установка at в Linux
Команда at
обычно предустановлена во многих дистрибутивах Linux. Однако если она отсутствует в вашей системе, вы можете установить ее с помощью менеджеров пакетов, специфичных для вашего дистрибутива. Ниже приведены шаги по установке для некоторых распространенных дистрибутивов Linux:
Alpine Linux
sudo apk add at
Arch Linux / Endeavour OS / Manjaro Linux
sudo pacman -S at
Debian / Ubuntu / Linux Mint / Pop!_OS
sudo apt update sudo apt install at
RHEL / CentOS Stream / Fedora / AlmaLinux / Rocky Linux
sudo dnf install at
В старых системах RHEL используйте yum
, а не dnf
.
sudo yum install at
После завершения установки можно начать использовать команду at
для планирования задач на определенное время.
Запуск службы „at“
После установки служба atd
должна запуститься автоматически. Если она не запущена, ее можно запустить и включить с помощью следующих команд:
sudo systemctl start atd sudo systemctl enable atd
Примеры команд Linux at
Команда Linux at проста в использовании. Вы просто указываете время, в течение которого должна выполняться задача, и команду, которую Вы хотите запустить. После этого команда at
создаст файл задания и сохранит его в каталоге /var/spool/cron/atjobs/
. Когда наступит указанное время, команда at
выполнит файл задания.
Здесь приведены примеры использования команды at
для планирования одноразовых задач в Linux.
1. Планирование заданий в интерактивном режиме с помощью команды „at“
Команда at
позволяет планировать задания в интерактивном режиме, используя следующий синтаксис:
at [runtime]
При выполнении этой команды открывается интерактивное приглашение, в котором можно ввести команды, которые необходимо выполнить в указанное время. Кроме того, команда выводит предупреждение, указывающее на оболочку (например, /bin/sh
), которая будет использоваться для выполнения запланированного задания.
Чтобы сохранить запланированное задание и выйти из интерактивного окна, нажмите Ctrl + D. Если вы хотите отменить задание до его сохранения, то можете использовать Ctrl + C.
Посмотрите на следующий пример.
at 2:37 PM echo "Hello, Welcome to OSTechNix!" > /tmp/greeting.txt <Ctrl+D>
В этом примере команда echo
будет запланирована на 14:37. В указанное время в файл /tmp/greeting.txt
будет записан вывод «Hello, Welcome to OSTechNix!».
После планирования задания дождитесь истечения указанного времени. По истечении указанного времени можно проверить, сохранилось ли сообщение в файле greeting.txt
, расположенном в каталоге /tmp
.
sudo cat /tmp/greeting.txt[sudo] password for ostechnix:Hello, Welcome to OSTechNix!
Да, задание успешно выполнено в указанное время.
В данном примере мы запланировали выполнение команды echo "Hello, Welcome to OSTechNix!" > /tmp/greeting.txt
в определенное время с помощью команды at
. По истечении запланированного времени мы проверили содержимое файла greeting.txt
, чтобы убедиться, что сценарий успешно выполнился и сохранил сообщение, как и ожидалось.
2. Список запланированных заданий
Вы можете вывести список всех запланированных заданий в очереди at
, используя команду:
atq
Пример вывода:
4 Wed Aug 8 14:37:00 2023 a ostechnix
Команда atq
выводит список запланированных заданий в очереди „at“. Отображаемая информация включает в себя номер задания, дату, время, год и статус очереди для текущих заданий пользователя. В данном случае задание №4 запланировано на 14:37 8 августа 2023 года для пользователя ostechnix
.
Для просмотра отложенных заданий для всех пользователей выполните команду с правами администратора:
sudo atq
Приведенная выше команда извлекает список отложенных заданий at
, а при выполнении команды sudo
предоставляет обзор отложенных заданий для всех пользователей системы.
Для просмотра запланированных заданий можно также использовать флаг -l
с командой „at
„.
at -l
Флаг at -l
является просто алиасом для команды atq
.
3. Предварительный просмотр запланированных заданий
С помощью опции -c
можно просмотреть содержимое задания, которое ранее было запланировано с помощью команды at
. Эта опция может пригодиться, если необходимо узнать подробности задания или проверить его запланированное время.
Чтобы просмотреть содержимое запланированного задания at
, выполните следующую команду
at -c [job_number]
Пример:
at -c 7
Пример вывода:
#!/bin/sh # atrun uid=1000 gid=1000 # mail ostechnix 0 umask 22 LANGUAGE=en_IN:en; export LANGUAGE PWD=/home/ostechnix; export PWD LOGNAME=ostechnix; export LOGNAME XDG_SESSION_TYPE=tty; export XDG_SESSION_TYPE [...]
Для определения конкретного номера задания необходимо первоначально выполнить команду atq
. В результате будет получен список всех ожидающих выполнения заданий с указанием их номеров.
4. Передача задания команде „at“
Вы можете запланировать задание без использования интерактивного приглашения at
. Для этого используются команды типа echo
или printf
для передачи команд команде at
с указанием желаемого времени выполнения.
Например, чтобы запланировать задание at
, которое принимает вывод команды echo
и записывает его в файл, можно использовать:
echo "Welcome to the tutorial on Linux 'at' Command" >> Linux_at_command.txt | at now
Это задание будет немедленно запущено.
Пример вывода:
warning: commands will be executed using /bin/shjob 6 at Wed Aug 9 12:50:00 2023
После планирования задания можно проверить его выполнение, проверив существование файла с помощью команды cat
:
cat Linux_at_command.txt Welcome to the tutorial on Linux 'at' Command
Таким образом, можно эффективно планировать задания с помощью команды at
без необходимости интерактивного ввода каждой команды отдельно.
5. Сценарии планирования
Не только команды, мы также можем запланировать выполнение скрипта на определенное время с помощью команды at
, как показано ниже.
at 2:00 AM tomorrow /path/to/my_script.sh <Ctrl+D>
В данном примере выполнение скрипта my_script.sh
будет запланировано на 2:00 утра следующего дня. Пожалуйста, замените путь к скрипту на свой собственный.
Давайте посмотрим практический пример, чтобы вы могли понять его наглядно.
- Создание скрипта с именем
testscript.sh
:
cat << EOF > testscript.sh > echo "Hello, Welcome to OSTechNix!" > /tmp/greeting.txt > EOF
Данная команда использует heredoc (<<
) для создания скрипта с именемtestscript.sh
с содержимым, которое следует доEOF
. Скрипт просто эхо-сигнал с текстом «Hello, Welcome to OSTechNix!» в файл с именем/tmp/greeting.txt
. - Сделать скрипт исполняемым:
sudo chmod +x testscript.sh
Эта команда дает скриптуtestscript.sh
разрешение execute, используяchmod
. Теперь скрипт может выполняться как самостоятельная программа. - Проверка текущей даты и времени:
date
Пример вывода:
Wednesday 09 August 2023 12:16:04 PM IST
Как видно, точное время на момент выполнения этой команды – 12:16:04 PM. - Теперь запланируем запуск скрипта
testscript.sh
на более позднее время (например, 12:18 PM) с помощью командыat
:
at 12:18 PM -f ./testscript.sh
Пример вывода:
warning: commands will be executed using /bin/sh job 5 at Wed Aug 9 12:18:00 2023
Эта команда планирует выполнение сценарияtestscript.sh
на 12:18 PM 11 августа 2023 года. Предупреждение указывает на то, что команды будут выполняться с помощью оболочки/bin/sh
. - Проверка запланированных заданий в очереди at:
atq
Пример вывода:
5 Wed Aug 9 12:18:00 2023 a ostechnix
Командаatq
выводит список запланированных заданий в очереди at. В данном случае задание №5 запланировано на 12:18 PM 9 августа 2023 года. - Теперь дождитесь истечения указанного времени. По истечении указанного времени снова проверьте очередь „
at
„:
atq
Вывод командыatq
теперь должен быть пустым, так как запланированное задание уже выполнено. - Проверьте содержимое
/tmp/greeting.txt
после выполнения сценария:
cat /tmp/greeting.txt
*Пример вывода: *
Hello, Welcome to OSTechNix!
Как видно из приведенного выше вывода, команда cat
отображает содержимое файла /tmp/greeting.txt
, который был создан сценарием testscript.sh
.
6. Планирование заданий с использованием определенного формата даты и времени
Если вы хотите запланировать выполнение команды с использованием определенного формата даты и времени, выполните следующие действия:
at 01:47PM 2023-08-09 warning: commands will be executed using /bin/sh at Wed Aug 9 13:47:00 2023 at> echo "This is a scheduled task using a specific date and time format." > /tmp/date.txt at> <EOT> job 11 at Wed Aug 9 13:47:00 2023
В данном случае команда at
указывает системе запланировать выполнение задания на 01:47 вечера 9 августа 2023 года.
Подробнее о «выражениях времени» вы можете прочитать далее в этом руководстве.
7. Отправка уведомления по электронной почте о завершении задания
Чтобы отправить уведомление по электронной почте о завершении задания с помощью команды at
, выполните следующие действия:
- Убедитесь, что в системе работает конфигурация электронной почты, а учетная запись пользователя связана с действительным адресом электронной почты.
- Чтобы указать команде
at
отправлять уведомления по электронной почте по завершении задания, даже если вывода нет, необходимо указать опцию-m
при планировании задания.
Например, чтобы запустить скрипт с именемtestscript.sh
и получить уведомление по электронной почте по его завершении:
cat testscript.sh | at -m now + 1 hour
В этом случае командаtestscript.sh
передается командеat
, а опция-m
используется для обеспечения отправки уведомления по электронной почте по завершении задания. - После завершения задания на настроенный адрес электронной почты, связанный с учетной записью пользователя, должно прийти уведомление. В письме будет содержаться информация о выполнении задания.
Помните, что эффективность данного подхода зависит от конфигурации электронной почты в вашей системе. Если возникнут проблемы, убедитесь, что система настроена на отправку электронной почты и что адрес электронной почты пользователя правильно сконфигурирован.
8. Планирование заданий без уведомления по электронной почте
Для предотвращения получения уведомлений по электронной почте при завершении задания можно использовать опцию -M
при планировании задания at
.
Например:
echo "testscript.sh" | at -M 02:00
Включив опцию -M
в команду at
, вы обеспечите выполнение задания без генерации уведомлений по электронной почте при его завершении.
Это особенно полезно, когда вы хотите выполнять задания беззвучно, не получая уведомлений по электронной почте.
9. Удаление запланированных заданий
Для удаления запланированного задания с помощью команды at
можно использовать либо команду atrm
, либо опцию -r
с командой at
, за которой следует идентификатор задания. Ниже приведены шаги для обоих методов:
9.1. Использование команды atrm
Идентифицируйте идентификатор запланированного задания, выполнив команду atq
или используя опцию -l
с командой at
.
Для удаления задания с указанным идентификатором выполните следующую команду:
atrm [job_id]
Замените [job_id]
на фактический идентификатор задания, которое вы хотите удалить.
Пример:
- Сначала выведите список всех запланированных заданий с помощью команды
atq
:
atq
Пример вывода:
7 Sun Mar 14 13:31:00 2230 a ostechnix 9 Fri Aug 9 13:40:00 3241 a ostechnix 8 Sun Mar 14 13:33:00 2230 a ostechnix 10 Wed Aug 9 13:42:00 3245 a ostechnix
Как видно, существует 4 незавершенных задания. - Чтобы удалить задание, например, задание с ID 7, выполните:
atrm 7
- Проверьте, удалено ли задание, выведя список запланированных заданий :
atq 9 Fri Aug 9 13:40:00 3241 a ostechnix 8 Sun Mar 14 13:33:00 2230 a ostechnix 10 Wed Aug 9 13:42:00 3245 a ostechnix
Видите? 7-е задание удалено.
9.2 Использование опции at -r
Идентифицируйте идентификатор запланированного задания, выполнив команду atq
или используя опцию -l
с командой at
.
Для удаления задания с указанным идентификатором выполните следующую команду:
at -r [job_id]
Замените [job_id]
на фактический идентификатор задания, которое вы хотите удалить.
Помните, что для удаления заданий, запланированных другими пользователями, необходимы соответствующие привилегии (обычно root или sudo). Если вы являетесь владельцем задания, то, как правило, можете удалить его без дополнительных прав.
10. Allow or Deny Users
Файлы /etc/at.allow
и /etc/at.deny
используются для управления доступом пользователей к командам at
и batch
, которые позволяют планировать задания для последующего выполнения. Эти файлы определяют, каким пользователям разрешено отправлять команды для последующего выполнения с помощью команд at
и batch
.
В обоих файлах имеется список имен пользователей, причем каждое имя пользователя указывается в отдельной строке. Пробелы не допускаются.
Если существует файл /etc/at.allow
, то только именам пользователей, указанным в этом файле, предоставляется разрешение на использование команды at
. Если /etc/at.allow
пуст или не существует, то контроль доступа определяется файлом /etc/at.deny
.
Если /etc/at.allow
не существует или не предоставляет доступ определенному пользователю, проверяется файл /etc/at.deny
. Пользователям, не указанным в /etc/at.deny
, разрешается использовать команды at
и batch
.
Если /etc/at.deny
пуст, все пользователи имеют право использовать команду at
.
Если ни /etc/at.allow
, ни /etc/at.deny
не существует, только суперпользователь (root) имеет право использовать команды at
и batch
.
Файл /etc/at.allow
имеет приоритет над файлом /etc/at.deny
. Если пользователь указан в обоих файлах, то доступ предоставляется на основании /etc/at.allow
.
Эти файлы обеспечивают простое, но эффективное средство контроля за тем, какие пользователи могут использовать команды at
и batch
для планирования задач для последующего выполнения в системе.
На примере рассмотрим, как ограничить использование команды at
.
Чтобы ограничить использование команды at
, можно использовать файлы /etc/at.allow
и /etc/at.deny
. Вот как это можно сделать:
10.1. Использование файла /etc/at.deny
Откройте файл /etc/at.deny
в текстовом редакторе и добавьте в него имена пользователей, которых вы хотите ограничить, каждое в отдельной строке. Сохраните и выйдите из файла.
Например, чтобы ограничить пользователей «user1» и «user2», можно выполнить:
echo "user1" | sudo tee -a /etc/at.deny echo "user2" | sudo tee -a /etc/at.deny
Сейчас переключитесь на любого ограниченного пользователя и попробуйте выполнить любую команду „at“:
su - user1 atq You do not have permission to use atq.
10.2. Использование файла /etc/at.allow
Если вы хотите разрешить использование команды at
только определенным пользователям, вы можете создать файл /etc/at.allow
и добавить в него имена пользователей, которым разрешено использовать команду, каждое в отдельной строке. Сохраните файл и выйдите из него.
Например, чтобы разрешить использование команды at
только «ostechnix», вы можете выполнить:
echo "ostechnix" | sudo tee -a /etc/at.allow
Помните, что файл /etc/at.allow
имеет приоритет над файлом /etc/at.deny
. Если имя пользователя указано в обоих файлах, то ему будет разрешено использовать команду at
.
После внесения этих изменений пользователи, которых вы ограничили, больше не смогут использовать команду at
.
11. Выполнение заданий, если позволяет загрузка системы
Команда «batch
« выполняет задания при благоприятных условиях загрузки системы. В частности, она инициирует выполнение, когда среднее значение нагрузки падает меньше 1,5 или заданного значения, установленного при вызове демона «atd
«. Такой подход позволяет обеспечить выполнение заданий в периоды пониженной активности системы.
Вот как можно использовать команду batch
для выполнения заданий, когда нагрузка на систему позволяет:
- Откройте терминал.
- Введите
batch
и нажмите Enter. Это приведет к запуску командыbatch
и появлению приглашения, в котором можно ввести команды для выполнения. - Введите команды, которые необходимо выполнить, когда нагрузка на систему упадет ниже порога. Например:
echo "Job started at $(date)" >> job_log.txt sleep 5 echo "Job finished at $(date)" >> job_log.txt
В данном примере задание регистрирует время начала, ждет 5 секунд с помощью командыsleep
, а затем регистрирует время окончания. - Нажмите
Ctrl + D
, чтобы показать, что вы закончили ввод команд. Введенные команды будут поставлены в очередь на выполнение, когда средняя нагрузка на систему будет ниже порогового значения.
- Система выполнит поставленные в очередь команды, когда среднее значение нагрузки опустится ниже заданного порога, который обычно составляет около 1,5.
- Проверить выполнение пакетного задания можно, просмотрев содержимое txt-файла
job_log
.
cat job_log.txt Job started at Wednesday 09 August 2023 03:48:06 PM IST Job finished at Wednesday 09 August 2023 03:48:11 PM IST
Не забывайте, что командаbatch
опирается на условия загрузки системы, поэтому возможна задержка перед выполнением заданий в зависимости от нагрузки на систему в данный момент.
Следует отметить, что реальное поведение команды batch
может несколько отличаться в зависимости от конкретной реализации в вашей системе.
Выражения времени
Команда at
принимает различные форматы времени для планирования заданий. Например, с помощью команды HH:MM
можно запланировать задание на определенное время суток. Если это время уже прошло, то предполагается, что задание будет выполнено на следующий день.
Примечательно, что есть возможность указать конкретное время, например, полночь, полдень или время (16.00). Кроме того, к времени можно добавить суффикс AM или PM, чтобы указать утро или вечер.
Можно также указать день, в который должно быть выполнено задание. Это можно сделать, указав дату в таких форматах, как месяц-имя-день (с необязательным годом), MMDD[CC]YY
, MM/DD/[CC]YY
, DD.MM.[CC]YY
или [CC]YY-MM-DD
. Спецификация даты должна следовать за спецификацией времени суток.
Более того, вы можете гибко определять относительное время, например, сейчас считать единицы времени. Единицами времени могут быть минуты, часы, дни или недели.
Чтобы указать на выполнение задания сегодня, можно просто добавить к времени суффикс «today». Аналогичным образом, суффикс «завтра» приводит к планированию задания на следующий день.
- Примеры:*
Например, если вы хотите выполнить задание в 14:00 через 5 дней, вы можете использовать синтаксис:
at 2pm + 5 days
Для планирования задания на 11:00 утра 31 августа вы можете использовать:
at 11am Aug 31
Для задания на 3 часа ночи завтра, команда будет такой:
at 3am tomorrow
В тех случаях, когда задание задается на время и дату в прошлом, оно будет выполнено как можно скорее. Например, если сейчас 11 часов вечера, а вы запланировали задание на 9 часов вечера того же дня с помощью команды at 9pm today
, то оно, скорее всего, будет выполнено около 11:05.
В следующей таблице дается четкое описание различных выражений времени и их использования для планирования заданий с помощью команды at
.
Временное выражение | Описание | Пример |
---|---|---|
HH:MM | Планирование работы в определенное время суток. | в 16:00 |
полночь, полдень, время чая | Специальное время суток. | в полночь |
AM или PM | Указание утреннего или вечернего времени. | в 8:30AM |
month-name day | Указание дня работы с необязательным годом. | в 10 утра 31 июля |
MMDD[CC]YY, MM/DD/[CC]YY, DD.MM.[CC]YY, [CC]YY-MM-DD | различные форматы даты. | at 03142230 (для 14 марта 2023 года, 10:30 PM) |
now count time-units | Относительная спецификация времени. | в данный момент 2 часа |
сегодня, завтра | Планирование работы на сегодня или завтра. | в час ночи завтра |
Выражение времени команды Linux „at“ Более подробно о формате спецификации времени можно прочитать в файле /usr/share/doc/at/timespec
.
Шпаргалка по команде at
Перед вами шпаргалка по командам Linux at
в формате таблиц с колонками. Пожалуйста, распечатайте ее и держите поблизости для быстрого обращения к ней.
Задача | Команда | Пример |
---|---|---|
Планировать на определенное время | at <time> | at 3:30 PM |
Планировать после задержки | at now + <time> | at now + 2 hours |
Планировать с помощью файла сценария | at <time> -f <script_file> | at 9:00 AM tomorrow -f script.sh |
Интерактивная подсказка | at | |
Выполнение команд | at <time> <<< "command" | at 5:00 PM <<< "backup.sh" |
Просмотр отложенные задания | atq или at -l | |
Удалить задание | atrm <job_id> или at -r <job_id> | atrm 3 или at -r 3 |
Просмотреть содержимое задания | at -c <job_id> | at -c 5 |
Отправить уведомления по электронной почте | echo "command" | at -m <time> | echo "backup.sh" | at -m 11:00 PM |
подавить уведомления по электронной почте | echo "command" | at -M <time> | echo "command" | at -M 8:00 AM |
доступ к справке | at -h или man at |
Шпаргалка по команде Linux at Помните, что поведение команды at
в различных дистрибутивах Linux может несколько отличаться. Используйте эту шпаргалку в качестве краткого справочного руководства по эффективному использованию команды at
.
Заключение
В заключение можно сказать, что команда Linux at – это удобный инструмент, позволяющий планировать выполнение задач на определенное время в будущем. Это все равно что установить будильник, чтобы компьютер выполнял задания автоматически.
Так что, независимо от того, новичок вы в Linux или опытный пользователь, Linux at command может облегчить вам жизнь, выполняя задачи в нужное время.
Комментарии (0)