MyTetra Share
Делитесь знаниями!
Время создания: 26.12.2018 18:43
Автор: alensav
Раздел: MyTetra - Ubuntu_Command
Запись: xintrea/mytetra_db_alensav/master/base/15458390113hm1qzepll/text.html на raw.githubusercontent.com

http://rus-linux.net/MyLDP/admin/manage-planned-tasks-on-linux-with-the-command-at.html

Планирование задач при помощи программы 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 является частью набора, состоящего из четырех программ: at, batch, atq и atrm:

  • at выполняет задачи в назначенное время.
  • atq выводит список ожидающих выполнения задач для каждого пользователя; в случае использования суперпользователем, выводятся все ожидающие выполнения задачи.
  • atrm удаляет задачи, заданные идентификаторами.
  • batch выполняет задачи во время периодов низкой загруженности системы; другими словами, когда средний уровень загрузки системы падает ниже значения 1.5 или того значения, которое задано при вызове atd.

Использование программы at

После запуска at предлагает вам ввести последовательность команд для выполнения. Чтобы закончить ввод команд, следует использовать комбинацию клавиш CTRL-D. Описание основных параметров командной строки 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

В том случае, если задать только время, задача будет запланирована на следующий момент достижения этого времени, например, я задал время 20.00, а исполнение задачи было запланировано на следующий день в это время:

#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

А это еще один пример с использованием сочетания клавиш CTRL+D для завершения ввода команд:

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 в качестве альтернативы команде at -l для просмотра списка запланированных или выполняющихся в данный момент задач, а единственным аргументом этой программы является -q для указания определенной очереди.

#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 идентификатор_задачи

Она выведет длинный список переменных окружения для выполнения команды и саму команду: #at -c 6 #!/bin/sh # atrun uid=1000 gid=1000 # mail linuxaria 0 umask 22 SSH_AGENT_PID=1579; export SSH_AGENT_PID XDG_SESSION_COOKIE=586bed7d66c5f3bf0810f6ce0000001c-1350495018.439467-8023144; export XDG_SESSION_COOKIE WINDOWID=25165830; export WINDOWID GNOME_KEYRING_CONTROL=/tmp/keyring-m0UVoj; export GNOME_KEYRING_CONTROL USER=linuxaria; export USER LIBGL_DRIVERS_PATH=/usr/lib/fglrx/dri:/usr/lib32/fglrx/dri; export LIBGL_DRIVERS_PATH SSH_AUTH_SOCK=/tmp/ssh-DbbUjzXR1501/agent.1501; export SSH_AUTH_SOCK USERNAME=riccio; export USERNAME SESSION_MANAGER=local/mint-desktop:@/tmp/.ICE-unix/1501,unix/mint-desktop:/tmp/.ICE-unix/1501; export SESSION_MANAGER DEFAULTS_PATH=/usr/share/gconf/default.default.path; export DEFAULTS_PATH XDG_CONFIG_DIRS=/etc/xdg/xdg-default:/etc/xdg; export XDG_CONFIG_DIRS PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games; export PATH DESKTOP_SESSION=default; export DESKTOP_SESSION PWD=/tmp; export PWD GNOME_KEYRING_PID=1424; export GNOME_KEYRING_PID LANG=en_US.UTF-8; export LANG MANDATORY_PATH=/usr/share/gconf/default.mandatory.path; export MANDATORY_PATH MDM_XSERVER_LOCATION=local; export MDM_XSERVER_LOCATION SHLVL=1; export SHLVL HOME=/home/linuxaria; export HOME LOGNAME=linuxaria; export LOGNAME XDG_DATA_DIRS=/usr/share/default:/usr/local/share/:/usr/share/:/usr/share/mdm/; export XDG_DATA_DIRS DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-QWgLeCbkps,guid=b1c32f270937311ee26524ff00000031; export DBUS_SESSION_BUS_ADDRESS MDMSESSION=default; export MDMSESSION WINDOWPATH=8; export WINDOWPATH MDM_LANG=en_US.UTF-8; export MDM_LANG XAUTHORITY=/home/linuxaria/.Xauthority; export XAUTHORITY COLORTERM=gnome-terminal; export COLORTERM cd /tmp || { echo 'Execution directory inaccessible' >&2 exit 1 } cp -a /project/source/* /backup/source/^C

Этот вывод позволяет гораздо лучше понять предназначение задачи.

Удаление запланированной задачи при помощи atrm

Мы научились просматривать список запланированных задач и при желании их содержимое, теперь настало время рассмотреть способ их удаления из очереди при помощи программы atrm или команды at -d для удаления определенной задачи.

Таким образом, для удаления задачи с идентификатором 3, вам необходимо просто ввести команду:

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, для которых планирование задач запрещено.

Command at

http://blog.sedicomm.com/2017/11/21/kak-ispolzovat-komandu-at-dlya-planirovaniya-zadachi-v-linux/

Например

Чтобы запустить updateb в 23 часа сегодня (или завтра, если текущая дата больше 11 часов), выполните:

# echo "updatedb" | at -m 23

 

Чтобы отключить систему в 23:55 сегодня (применяются те же критерии, что и в предыдущем примере):

# echo "shutdown -h now" | at -m 23:55

 

Вы также можете отсрочить выполнение на минуты, часы, дни, недели, месяцы или годы, используя знак + и указать необходимое время, как в первом примере.

Формат указание времени (спецификации времени) соответствуют стандарту POSIX.

=====

https://linux-faq.ru/page/komanda-at

Команда at

Служба atd предназначена для выполнения команд в заданное время. В отличие от службы crond, служба atd выполняет каждую команду лишь раз и не предназначена для выполнения команд через заданные промежутки времени.

Команда at предназначена для управления службой atd, которая установлена по умолчанию в большинстве дистрибутивов Linux.

Примеры использования

Для планирования исполнения команд следует осуществлять вызов команды at со следующими аргументами:

at <время> <дата>
at ЧЧ:ММ ММ/ДД/ГГ

Например, для исполнения команды в 12:15 после полудня в этот же день может использоваться следующая команда:

at 12:15 PM today

А для исполнения команды в 12:15 до полудня на следующий день — следующая:

at 12:15 tomorrow

Дата и время могут записываться в нескольких форматах: 02/01/09 или 02.01.09 и 4:00 pm или 16:00 соответственно.

После исполнения команды at с указанием времени и даты вы будете перемещены в простейшую интерактивную командную оболочку с приглашением at>. С помощью этой командной оболочки вы сможете ввести последовательность команд для исполнения, после чего вам нужно будет перейти на новую строку и воспользоваться сочетанием клавиш Ctrl+D для ее закрытия.

$ at 12:15
at> echo "i like linux-faq.ru"
at> ctrl-d
at> <EOT>
job 17 at Fri Nov 25 12:15:00 2016

В том случае, если вы явно не укажите дату, но укажите время, которое в текущий день уже прошло, at будет предполагать, что вы хотите запланировать исполнение заданной последовательности команд в заданное время на следующий день.

Приведенная выше команда может быть запланирована для исполнения в то же время и с помощью следующей команды без необходимости работы с интерактивной командной оболочкой:

echo "i like linux-faq.ru" | at 12:15 tomorrow

Кроме того, вы можете использовать ключевые слова и числа. Например, для планирования исполнения команды в текущее время через неделю может использоваться следующая команда:

at now + 1 week

А для планирования исполнения команды в 4 часа утра через 3 для — следующая команда:

at 4:00 am + 3 days

Ознакомление со списком команд, запланированных для исполнения

Для ознакомления со списком команд, запланированных для исполнения, может использоваться либо аргумент -l команды at, либо отдельная команда atq:

at -l
atq

Удаление из очереди команд, запланированных для исполнения

Для удаления команд, запланированных для исполнения, из очереди следует использовать либо аргумент -d команды at, либо отдельная команда atrm:

at -d <идентификатор задачи>
atrm <идентификатор задачи>


Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования