Библиотека сайта rus-linux.net
Планирование задач при помощи программы at в Linux
Оригинал: Manage planned tasks on Linux with the command atАвтор: Riccardo Capecchi
Дата публикации: 17 октября 2012 г.
Перевод: А.Панин
Дата публикации перевода: 15 ноября 2012 г.
В прошлой статье я рассказывал о программах cron и crontab, которые используются для планирования периодически повторяющихся действий в системе GNU/Linux.
Но в некоторых случаях вам может потребоваться однократно выполнить задачу в заданное время, как раз для этой цели лучше всего подходит программа at, которая также позволяет выполнять команды во время снижения загрузки системы.
Еще одной причиной использования at может быть ваше желание выполнить команду, занимающую много времени, и отключиться от сервера; программа at подойдет и для этой задачи, но я бы также порекомендовал ознакомиться со статьями о запуске команд в фоновом режиме и использовании утилиты screen.
Таким образом, главной задачей программы at является "планирование однократного исполнения задачи". В этом плане она похожа на программу cron, которая обычно используется для планирования периодически повторяющихся задач; давайте рассмотрим основные примеры использования этой программы.
- at выполняет задачи в назначенное время.
- atq выводит список ожидающих выполнения задач для каждого пользователя; в случае использования суперпользователем, выводятся все ожидающие выполнения задачи.
- atrm удаляет задачи, заданные идентификаторами.
- batch выполняет задачи во время периодов низкой загруженности системы; другими словами, когда средний уровень загрузки системы падает ниже значения 1.5 или того значения, которое задано при вызове atd.
Использование программы at
at [-m] [-q очередь] [-f файл] ВРЕМЯ
- -q используется для указания очереди. Очередь обозначается одной буквой; корректными очередями считаются очереди с идентификаторами от a до z и от A до Z. Очередь с идентификатором a используется по умолчанию, а очередь с идентификатором b является очередью для программы batch. Команды из очередей с идентификаторами, находящимися далее по алфавиту, выполняются с более высоким приоритетом (nice). Специальная очередь "=" зарезервирована для команд, исполняющихся в данный момент. Если команда добавлена в очередь, идентификатором которой является заглавная буква, считается, что команда передана программе batch. В том случае, если программе atq передан идентификатор очереди, программа выведет команды, находящиеся только в этой очереди.
- -m позволяет отправить пользователю сообщение по электронной почте после выполнения задачи даже в том случае, когда выполненная программа ничего не вывела.
- -f позволяет прочитать команды из файла, а не со стандартного ввода.
- В качестве времени at принимает строки в форматах, совместимых со стандартом POSIX.2. Принимается строка, указывающая время в формате ЧЧ:ММ, позволяющая выполнить команду в назначенное время в течение дня. Вы также можете задать день для выполнения команды при помощи строки, указывающей дату в формате имени месяца и дня с необязательным указанием года или задав дату строкой формата ММДДГГ или ММ/ДД/ГГ или ДД.ММ.ГГ. Указание даты должно следовать за указанием времени.
Примеры
#date Wed Oct 17 22:31:05 CEST 2012
#at -f my_at_test.sh 20:00 warning: commands will be executed using /bin/sh job 4 at Thu Oct 18 20:00:00 2012
#at -f my_at_test.sh 22:35 warning: commands will be executed using /bin/sh job 5 at Wed Oct 17 22:35:00 2012
at midnight Friday warning: commands will be executed using /bin/sh at> cp -a /project/source/* /backup/source/^C at> job 6 at Fri Oct 19 00:00:00 2012
Просмотр всех запланированных задач при помощи atq
#atq 3 Thu Oct 18 10:25:00 2012 a linuxaria 4 Thu Oct 18 20:00:00 2012 a linuxaria 6 Fri Oct 19 00:00:00 2012 a linuxaria
На мой взгляд, вывод программы не особенно полезен, так как вы не можете посмотреть, какая команда выполняется в рамках задачи с идентификатором 3 или любой другой задачи.
at -c идентификатор_задачи
Она выведет длинный список переменных окружения для выполнения команды и саму команду:
Этот вывод позволяет гораздо лучше понять предназначение задачи.
Удаление запланированной задачи при помощи atrm
Мы научились просматривать список запланированных задач и при желании их содержимое, теперь настало время рассмотреть способ их удаления из очереди при помощи программы atrm или команды at -d для удаления определенной задачи.
atrm 3
Данная команда ничего не выводит в консоль, но после ее выполнения вы можете убедиться в удалении задачи при помощи команды atq.
Ограничение круга пользователей программы at
Файлы /etc/at.allow и /etc/at.deny устанавливают пользователей, которые могут планировать задачи для последующего исполнения при помощи программ at и batch. В качестве формата этих файлов используется простой список имен пользователей по одному в каждой строке. Использование пробелов в этих файлах не допускается.
Пользователь root может использовать программы at и batch при любых условиях.
В случае существования файла /etc/at.allow, на его основе устанавливается круг пользователей, которым разрешено планирование задач, но обычно в системах этого файла не существует.
Если файла /etc/at.allow не существует, проверяется файл /etc/at.deny, который обычно содержит длинный список "системных пользователей", таких как bin, backup, ftp или www-data, для которых планирование задач запрещено.