Linux at не работает

Обновлено: 06.07.2024

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

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

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

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

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

at 4:00 am + 3 days

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

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

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

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

В этой статье мы расскажем , как использовать at и его компаньоны утилитами batch , atq , atrm просматривать, удалять и создавать новые рабочие места , которые должны выполняться в более позднее время.

Установка at

В зависимости от дистрибутива at может присутствовать или отсутствовать в вашей системе Linux.

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

  • Установить at Ubuntu и Debian
  • Установить at CentOS и Fedora

После установки программы убедитесь, что atd , демон планирования запущен и настроен на запуск при загрузке:

Как использовать команду at

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

Команда at принимает дату и время ( runtime ), когда вы хотите выполнить задание, как параметр командной строки, и команду, которая должна быть выполнена из стандартного ввода.

Создадим задание, которое будет выполнено в 9:00:

Как только вы нажмете Enter , вам будет представлена командная строка at которая чаще всего начинается с at> . Вы также увидите предупреждение о том, в какой оболочке будет выполняться команда:

Введите одну или несколько команд, которые хотите выполнить:

Когда вы закончите вводить команды, нажмите Ctrl-D чтобы выйти из подсказки и сохранить задание:

Команда отобразит номер задания, время и дату выполнения.

Чтобы читать команды из файла вместо стандартного ввода, вызовите команду с параметром -f путь к файлу. Например, чтобы создать задание, которое будет запускать скрипт /home/linuxize/script.sh :

По умолчанию, если команда производит вывод, at отправит электронное письмо с выводом пользователю после завершения задания. Invoke at с -M опцией для подавления уведомлений по электронной почте:

batch команда

batch или его псевдоним at -b планирует задания и выполняет их в пакетной очереди, если позволяет уровень загрузки системы. По умолчанию задания выполняются, когда средняя загрузка системы ниже 1,5. Значение нагрузки можно указать при вызове демона atd . Если средняя загрузка системы выше указанной, задания будут ждать в очереди.

Чтобы создать batch задание, передайте команды, которые хотите выполнить:

Указание времени выполнения

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

Время, дату и приращение можно комбинировать, вот несколько примеров:

  • Запланируйте работу на ближайшее воскресенье на время на десять минут позже текущего:
  • Запланируйте запуск задания на 13:00 через два дня:
  • Запланируйте запуск задания на 12:30 21 октября 2020 г .:
  • Запланируйте запуск задания через час:

Вы также можете указать время и дату в [[CC]YY]MMDDhhmm[.ss] используя параметр -t . Вот пример:

Указание очереди

По умолчанию задания, созданные с помощью at , планируются в очереди с именем a а задания, созданные с помощью batch , планируются в очереди b .

Запросы могут иметь имена от a до z и от A до Z Очереди с меньшими буквами работают с меньшей аккуратностью, что означает, что они имеют приоритет над очереди с более высокими буквами.

Вы можете указать очередь с помощью опции -q . Например, чтобы установить задание в L очередь, вы должны запустить:

Список незавершенных вакансий

Чтобы вывести список ожидающих заданий пользователя, выполните atq или at -l :

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

Когда atq вызывается от имени администратора, он перечисляет ожидающие задания всех пользователей.

Удаление незавершенных заданий

Чтобы удалить отложенное задание, atrm команду atrm или at -r после которой atrm номер задания. Например, чтобы удалить задание с номером девять, вы должны запустить:

Ограничение пользователей

/etc/at.deny и /etc/at.allow позволяют контролировать, какие пользователи могут создавать задания с помощью команды at или batch . Файлы состоят из списка имен пользователей, по одному имени пользователя в строке.

По умолчанию существует только файл /etc/at.deny и он пуст, что означает, что все пользователи могут использовать команду at . Если вы хотите отказать в разрешении определенному пользователю, добавьте имя пользователя в этот файл.

Если файл /etc/at.allow существует, только пользователи, перечисленные в этом файле, могут использовать команду at .

Если ни один из файлов не существует, только пользователи с правами администратора могут использовать команду at .

Выводы

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

Для получения дополнительной информации обо всех доступных параметрах команды at введите man at в вашем терминале.

Favorite

Добавить в избранное (1 оценок, среднее: 5,00 из 5)

Команда At в Linux

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

Установка at

В зависимости от дистрибутива at может присутствовать или не присутствовать в вашей системе Linux.

Если at не установлена, вы можете легко установить его, используя менеджер пакетов вашего дистрибутива.

  • Установить at на Ubuntu и Debian
  • Установить at на CentOS и Fedora

После установки программы atd, убедитесь что демон планирования запущен и настроен на запуск при загрузке:

Как использовать команду at

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

Команда at берет дату и время ( runtime), когда вы хотите выполнить задание в качестве параметра командной строки, и команду, которая будет выполнена из стандартного ввода.

Давайте создадим задание, которое будет выполнено в 12:00 утра:

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

Введите одну или несколько команд, которые вы хотите выполнить:

Когда вы закончите ввод команд, нажмите Ctrl-D, чтобы выйти из командной строки и сохранить задание:

Команда отобразит номер задания, время выполнения и дату.

Есть и другие способы передачи команды, которую вы хотите выполнить, помимо ввода команды at в командной строке. Одним из способов является использование echo и передача команды для at:

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

Чтобы прочитать команды из файла вместо стандартного ввода, вызовите команду с опцией -f, следующей за путем к файлу. Например, чтобы создать задание, которое будет запускать скрипт /home/andreyex/script.sh:

Читать Временные метки файлов в Linux: atime, mtime, ctime. Разъяснения

По умолчанию, если команда выдает результат, atотправит электронное письмо с выводом пользователю после завершения задания. Вызвать at -M с возможностью подавления уведомления по электронной почте:

Используйте -m для отправки электронной почты, даже если нет вывода:

Команда batch

batch или его псевдоним at -b, планирует задания и выполняет их в очереди пакетов, когда позволяет уровень загрузки системы. По умолчанию задания выполняются, когда средняя загрузка системы ниже 1,5. Значение загрузки может быть указано при вызове демона atd. Если средняя загрузка системы выше указанной, задания будут ждать в очереди.

Чтобы создать задание batch, передайте команды, которые вы хотите выполнить:

Указание времени выполнения

Утилита at принимает широкий диапазон спецификаций времени. Вы можете указать время, дату и приращение от текущего времени:

Время, дата и приращение могут быть объединены, вот несколько примеров:

  • Запланируйте работу на предстоящее воскресенье на десять минут позже текущего времени:
  • Запланируйте работу на 14:00 через два дня:
  • Запланируйте работу на 12:30 25 октября 2020 года:
  • Запланируйте задание на выполнение через час:

Вы также можете указать время и дату [[CC]YY]MMDDhhmm[.ss] используя опцию -t. Вот пример:

Указание очереди

По умолчанию задания, созданные с помощью at, планируются в названной очереди, aа задания, созданные с помощью batch, планируются в очереди.

Запросы могут иметь имя от a до z и A до Z. Очереди со строчными буквами запускаются с меньшим количеством символов, что означает, что они имеют приоритет перед теми, которые имеют более высокие буквы.

Вы можете указать очередь с опцией -q. Например, чтобы установить задание в очередь L, вы должны выполнить:

Список ожидающих работ

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

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

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

Удаление отложенных заданий

Чтобы удалить отложенное задание, вызовите команду atrm или at -r, за которой следует номер задания. Например, чтобы удалить задание с номером три, вы должны выполнить:

Ограничение пользователей

Файлы /etc/at.deny и /etc/at.allow позволяют вам контролировать, какие пользователи могут создавать новые рабочие места с командой at или batch. Файлы состоят из списка имен пользователей, по одному имени пользователя в строке.

По умолчанию существует только файл /etc/at.deny и является пустым, что означает, что все пользователи могут использовать команду at. Если вы хотите отказать в разрешении определенному пользователю, добавьте имя пользователя в этот файл.

Если файл /etc/at.allow существует, только пользователи, перечисленные в этом файле, могут использовать команду at.

Если ни один из файлов не существует, только команда с правами администратора может использовать команду at.

Вывод

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

Для получения дополнительной информации обо всех доступных опциях типа команды at man at в вашем терминале.

Если у вас есть какие-либо вопросы, не стесняйтесь оставлять комментарии.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Описание: Вам требуется запустить задачу в полночь, когда нагрузка на систему минимальна, или есть задачи, которые должны выполняться ежедневно или еженедельно, но вы бы в это время предпочли поспать или как-то еще порадоваться жизни. Другой причиной использовать планировщик задач может быть желание автоматизировать выполнение рутинных задач или стремление обеспечить регулярность и единообразие выполнения определенных заданий. Данная статья поможет вам использовать возможности cron и at, чтобы планировать периодическое или однократное выполнение задач.

Системы Linux® и UNIX® позволяют планировать как однократное, так и периодическое выполнение задач. В этой статье, взятой из учебного пособия Подготовка к экзамену LPI 102: Задачи администрирования (LPI exam 102 prep: Administrative tasks), показано, как это делать.

В системе Linux многие административные задачи должны выполняться часто и регулярно. К таким задачам относится ротация log-файлов для предотвращения переполнения файловых систем, создание резервных копий и подсоединение к серверу времени с целью синхронизации системы. Узнать подробнее об этих административных задачах можно, заглянув в упомянутое выше учебное пособие. Из этой статьи вы узнаете о возможностях функцийcron и anacron и команд crontab и at, которые служат для планирования в Linux. Даже если система бездействует или выключена, anacron поможет ей наверстать упущенное, когда она заработает в следующий раз.

Выполняйте задачи через равные промежутки времени

Выполнение задач через равные промежутки времени управляется функцией cron, которая состоит из демона crond и набора таблиц, описывающих, какая работа и как часто должна выполняться. Демон просыпается каждую минуту и проверяет файлы расписаний (crontabs), чтобы определить, что нужно сделать. Пользователи управляют этими файлами с помощью команды crontab. Демон crond обычно запускается процессом инициализации (init) при загрузке системы.

Для простоты давайте представим, что вы хотите регулярно запускать команду, показанную в листинге 1. Она всего лишь сообщает дату и время, но на ее примере можно понять, как использовать crontab для установки заданий для cron, а из вывода мы узнаем, когда она была выполнена. Создание записей в файле расписаний требует строки со скрытыми метасимволами программной оболочки, поэтому лучше будет сделать это с помощью простых команд и параметров. В настоящем примере команда echo будет запускаться из скрипта /home/ian/mycrontab.sh, которому не нужны параметры. Таким образом, не потребутся кропотливая работа со скрытыми символами.

Листинг 1. Пример простой команды

]$ ./mycrontest.sh
It is now 18:37:42 on Friday

Создание файла расписаний

Каждая запись в файле расписаний состоит из шести полей:

  • Минута
  • Час
  • День месяца
  • Месяц
  • День недели

Строка, которая должна быть запущена при помощи sh

Минуты и часы должны быть в пределах от 0 до 59 и от 0 до 12 соответственно, а день месяца и месяц — от 1 до 31 и от 1 до 12, соответственно. День недели меняется от 0 до 6, где 0 соответствует воскресенью. Также он может обозначаться как sun, mon, tue и т.д. Шестое поле — это все, что идет за пятым и интерпретируется как строка для передачи в sh. Знак процента (%) передается как начало строки, поэтому если вы хотите использовать % или любой другой специальный символ, ставьте перед ним обратный слэш (\). Строка до первого % передается в программную оболочку, а все, что после %, идет в стандартный ввод.

Различные поля, относящиеся к времени, могут иметь одно конкретное значение, интервал значений, например 0-10 или sun-wed, или разделенный запятыми список отдельных значений или интервалов. В некоторой степени искусственно созданная запись в файле расписаний для команды из нашего примера может выглядеть как в примере из листинга 2.

Листинг 2. Пример простого файла расписаний

0,20,40 22-23 * 7 fri-sat /home/ian/mycrontest.sh

В этом примере наша команда будет выполняться в 0-ю, 20-ю и 40-ю минуту (каждые 20 минут) в часы между десятью вечера и полночью по пятницам и субботам июля. Подробную информацию о других способах указать время можно найти в справочнике man для crontab(5).

Как насчет вывода?

Вас может заинтересовать, что происходит с выводом команды. Большинство команд, работающих с функцией cron, направляет вывод в журнал при помощи функции syslog, которая обсуждается в учебном пособии Подготовка к экзамену LPI 102: Задачи администрирования (LPI exam 102 prep: Administrative tasks). Однако любой вывод, который направляется в stdout, будет отправлен пользователю по почте. В листинге 3 показан вывод, который пользователь может получить от команды из нашего примера.

Листинг 3. Вывод cron, полученный по почте

Где находится мой файл расписаний?

Suid-программы

Suid-программы выполняются с правами владельца файла программы, а не с правами пользователя, в действительности запустившего программу. В учебном пособии Подготовка к экзамену LPI 101: Устройства, файловые системы Linux и стандарт Filesystem Hierarchy Standard вы найдете больше информации о suid, а в учебном пособии Подготовка к экзамену LPI 102: Задачи администрирования (LPI exam 102 prep: Administrative tasks) более подробно описана команда passwd.

Файл расписаний (crontab), который вы создали при помощи команды crontab, хранится в /etc/spool/cron под именем пользователя, создавшего его. Таким образом, файл расписаний, о котором речь шла выше, хранится в /etc/spool/cron/ian. Зная это, вы не удивитесь, что команда crontab, как и passwd, является suid-программой, которая выполняется с правами root.

В дополнение к пользовательским файлам расписаний в /var/spool/cron cron также проверяет /etc/crontab и файлы в каталоге /etc/cron.d. В этих системных файлах расписаний есть еще одно поле, между пятым, соответствующим дню недели, и командой. Оно определяет пользователя, для которого будет выполняться команда, как правило, этот пользователь — root. /etc/crontab может выглядеть, как пример из листинга 4.

Листинг 4. /etc/crontab

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

В этом примере фактическая работа выполняется командой run-parts, которая запускает скрипты из /etc/cron.hourly, /etc/cron.daily и т.д.; /etc/crontab просто контролирует временной режим периодических заданий. Обратите внимание, что все команды здесь выполняются с правами root. Заметьте также, что файл расписаний может содержать присваивание переменных shell, которые будут установлены перед запуском команд.

Anacron

Anacron хранит файлы с временными метками в /var/spool/anacron, делая в них записи, когда работа выполняется. При запуске anacron проверяет, сколько дней прошло с прошлого выполнения задания, и при необходимости запускает его. Таблица с заданиями для anacron хранится в файле /etc/anacrontab, формат которого немного отличается от /etc/crontab. Так же как и /etc/crontab, /etc/anacrontab может содержать установки среды. Каждому заданию соответствует четыре поля:

период
задержка
идентификатор задания
команда

Период — число дней, но можно определить его как @monthly, чтобы задание выполнялось только раз в месяц, независимо от того, сколько в нем дней. Задержка — сколько минут надо ждать от момента, когда задание готово к выполнению, до его запуска. Этим пользуются, чтобы избежать потока задач при включении системы. Идентификатор задания может содержать любой непустой символ, кроме слэшей (/).

И /etc/crontab, и /etc/anacrontab модифицируются непосредственным редактированием. Не надо использовать команду crontab, чтобы обновить эти файлы или файлы в каталоге /etc/cron.d.

Выполняйте задачи в определенное время

Бывает необходимо выполнить задачу лишь раз, а не делать это регулярно. С этой целью пользуйтесь командой at. Задания, которые должны быть выполнены, читаются из файла, указанного с флагом -f, или из стандартного ввода stdin, если -f не используется. Флаг -m отправляет письмо пользователю, даже если у команды нет стандартного вывода. Флаг -v показывает время, когда задание будет запущено перед чтением задания. Время также показывается в выводе.

В листинге 5 приведен пример работы сценария mycrontest.sh, который использовался ранее. В листинге 6 показан вывод, который отправляется пользователю после запуска задания. Обратите внимание, что он несколько более компактный, чем тот, что отсылается функцией cron.

Листинг 5. Использование команды at

]$ at -f mycrontest.sh -v 10:25
Sat Jul 7 10:25:00 2007

job 5 at Sat Jul 7 10:25:00 2007

Листинг 6. Вывод задачи, запущенной командой at

It is now 10:25:00 on Saturday

Указание времени может быть достаточно сложным. В листинге 7 приведено несколько примеров. Более подробную информауию можно найти на страницах справочника man, посвященных команде at, в файле /usr/share/doc/at/timespec или в файле типа /usr/share/doc/at-3.1.10/timespec, где 3.1.10 соответствует версии пакета at.

Листинг 7. Значения времени в команде at

]$ at -f mycrontest.sh 10pm tomorrow
job 14 at Sun Jul 8 22:00:00 2007
[ian@lyrebird

]$ at -f mycrontest.sh 2:00 tuesday
job 15 at Tue Jul 10 02:00:00 2007
[ian@lyrebird

]$ at -f mycrontest.sh 2:00 july 11
job 16 at Wed Jul 11 02:00:00 2007
[ian@lyrebird

]$ at -f mycrontest.sh 2:00 next week
job 17 at Sat Jul 14 02:00:00 2007

Значение nice для задания отражает, насколько оно «доброжелательно» к работе других пользователей. Обратитесь к учебному пособию Подготовка к экзамену 101: Команды GNU и UNIX (LPI exam 101 prep: GNU and UNIX commands) за информацией о командах nice и renice.

Для команды at есть также опция -q (queue — очередность). Увеличение очередности увеличивает значение nice для задания. Существует также команда batch, которая похожа на at, за исключением того, что команды выполняются только когда система достаточно мало загружена. Более подробно эти свойства описаны на страницах справочника man.

Управляйте запланированными задачами

Просмотр запланированных задач

Задачами из cron и at можно управлять. Для просмотра списка задач служит команда crontab с ключом -l, а команда atq показывает задания, поставленные в очередь при помощи at, как показано в листинге 8.

Листинг 8. Отображение запланированных заданий

]$ crontab -l
0,20,40 22-23 * 7 fri-sat /home/ian/mycrontest.sh
[ian@lyrebird

]$ atq
16 Wed Jul 11 02:00:00 2007 a ian
17 Sat Jul 14 02:00:00 2007 a ian
14 Sun Jul 8 22:00:00 2007 a ian
15 Tue Jul 10 02:00:00 2007 a ian

Если вы хотите просмотреть фактические команды, намеченные для выполнения at, то можете воспользоваться командой at с ключом -c и номером задания. Вы заметите, что большая часть окружения, которая была активна в момент запуска команды at, сохраняется для запланированной задачи. В листинге 9 показана часть вывода для задания 15 из листингов 7 и 8. .

Листинг 9. Использование at -c с номером задания

Обратите внимание, что содержимое нашего сценария было скопировано в виде встроенного документа, который будет выполнен программной оболочкой, определенной в переменной SHELL или /bin/sh, если переменная SHELL не установлена. В учебном пособии Подготовка к экзамену LPI 101, тема 103: Команды GNU и UNIX (LPI exam 101 prep, Topic 103: GNU and UNIX commands) можно посмотреть встроенные документы, если есть необходимость.

Удаление запланированных задач

Все запланированные в cron задачи можно удалить командой cron с ключом -r, как показано в листинге 10.

Листинг 10. Отображение и удаление заданий cron

]$ crontab -l
0,20,40 22-23 * 7 fri-sat /home/ian/mycrontest.sh
[ian@lyrebird

]$ crontab -r
[ian@lyrebird

]$ crontab -l
no crontab for ian

Для удаления системных задач cron или anacron отредактируйте /etc/crontab, /etc/anacrontab или отредактируйте или удалите файлы из каталога /etc/cron.d.

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

Листинг 11. Отображение и удаление заданий при помощи atq и atrm

]$ atq
16 Wed Jul 11 02:00:00 2007 a ian
17 Sat Jul 14 02:00:00 2007 a ian
14 Sun Jul 8 22:00:00 2007 a ian
15 Tue Jul 10 02:00:00 2007 a ian
[ian@lyrebird

Читайте также: