В Linux по команде
Обновлено: 21.11.2024
Команда at позволяет выполнять задания в будущем в заранее определенную дату или время. Обычно команда «at» используется для планирования вашего задания/скрипта, «atq» используется для отображения заданий, ожидающих выполнения, а «atrm» используется для удаления заданий из очереди. "at" обычно используется, когда вам нужно запустить задание только один раз в определенное время/дату.
в примерах команд
В следующем примере я создал простой скрипт с именем "at.sh", который создаст файл с именем "hello.txt" в каталоге "/tmp". Затем скрипт выполнит команду "date " и добавит результат в файл.
Содержание скрипта
Прежде чем мы сможем запустить скрипт, мы должны установить права «выполнения», введя команду «chmod +x at.sh».
Далее нам нужно запланировать запуск задания на некоторое время в будущем. В этом примере я собираюсь запланировать выполнение задания на "20:59".
Вы можете использовать команду "atq" для отображения запланированных заданий.
Из приведенного выше видно, что наше задание ожидает запуска в указанное время "20:59". Этой работе присвоен номер "9". Все номера заданий указаны в самом первом столбце.
Примерно в "20:59" наше задание будет запущено, и мы можем увидеть результат, который был создан ниже:
Если вам нужно отменить запланированное задание, вы можете использовать команду "atrm". В приведенном ниже примере у нас запланировано три задания. Если бы мы хотели отменить одно из этих заданий, мы бы ввели команду «atrm», за которой следует номер задания.
В приведенном выше выводе видно, что задание "12" было отменено. Теперь, когда мы вводим команду «atq», мы видим, что задание удалено.
Если вы хотите удалить несколько заданий, вы можете ввести команду "atrm", за которой следует номер задания, которое вы хотите отменить.
в параметрах времени
Команда at принимает время в формате ЧЧ:ММ для запуска задания в определенное время дня.
(Если это время уже прошло, предполагается, что это следующий день.)
Вы также можете указать полночь, полдень или время чая (16:00), а также указать время дня с суффиксом AM или PM для бега утром или вечером.
Вы также можете указать, в какой день будет выполняться задание, указав дату в формате месяц-именины с необязательным указанием года. Вы также можете указать дату в следующих форматах:
MMDD[CC]YY
MM/DD/[CC]YY
DD.MM.[CC]YY
[CC] ГГ-ММ-ДД.
Вы также можете указать время, например сейчас, + количество единиц времени, где единицами времени могут быть минуты, часы, дни или недели. Вы можете указать "at" запустить задание сегодня, добавив к времени сегодня, и запустить задание завтра, добавив к времени завтра.
в разрешениях
Пользователь root может запускать команду at, однако обычным пользователям потребуются соответствующие права. Расположение этих привилегий можно найти в файлах «/etc/at.allow» и «/etc/at.deny».
Файлы "/etc/at.allow" и "/etc/at.deny" определяют, какие пользователи могут отправлять команды для последующего выполнения.
Формат этих файлов представляет собой список имен пользователей, по одному в строке. Пробелы не допускаются.
Если файл "/etc/at.allow" существует, то только имена пользователей, упомянутые в нем, могут использовать "at".
Если файл "/etc/at.allow" не существует, то проверяется файл "/etc/at.deny", после чего разрешается использовать каждое имя пользователя, не упомянутое в нем.
Если файл "/etc/at.deny" пуст, это означает, что каждый пользователь может использовать команду "at".
Если ни один из файлов не существует, то только "root" может использовать "at".
Команда at — это метод терминала Linux, позволяющий планировать одноразовые задания на определенное время и дату.
Компьютеры хорошо справляются с автоматизацией, но не все знают, как заставить ее работать. Это настоящая роскошь, однако, иметь возможность запланировать задачу для компьютера в определенное время, а затем забыть об этом. Может быть, у вас есть файл для загрузки или скачивания в определенное время, или вам нужно обработать пакет файлов, которые еще не существуют, но гарантированно будут существовать к определенному времени, или настройка, которая требует мониторинга, или, может быть, вам просто нужно дружеское напоминание забрать хлеб с маслом по дороге домой с работы.
Для этого и предназначена команда at.
Что такое Linux в команде?
Команда at — это метод терминала Linux, позволяющий планировать одноразовые задания на определенное время и дату. Это спонтанная автоматизация с помощью терминала.
Установка в
В Linux команда at, вероятно, уже установлена. Вы можете убедиться, что он установлен, используя команду at -V. Пока возвращается версия, у вас установлено:
Если вы попытаетесь использовать at, а команда не будет найдена, большинство современных дистрибутивов Linux предлагают установить для вас отсутствующий пакет at.
Возможно, вам также потребуется запустить демон at под названием atd . В большинстве систем Linux вы используете команду systemctl, чтобы включить службы и настроить их автоматический запуск с этого момента:
Интерактивное планирование задания с помощью at
Когда вы используете команду at вместе со временем запуска задачи, вы открываете интерактивную подсказку at. Вы можете вводить команды, которые хотите запустить в указанное время.
Если это поможет, вы можете рассматривать этот процесс как приложение для ведения календаря, подобное тому, которое вы, вероятно, используете на своем мобильном телефоне: сначала вы создаете событие на день в определенное время, а затем указываете, что вы хотите случиться.
Например, попробуйте запланировать памятку для себя, создав задачу на несколько минут в будущем. Упростите задачу, чтобы снизить вероятность неудачи. Чтобы выйти из подсказки at, нажмите Ctrl+D на клавиатуре.
Как видите, at использует интуитивно понятные и естественные определения времени. Вам не нужно знать 24-часовой формат или переводить время в формат UTC или в определенный формат ISO. Как правило, вы можете использовать любое естественное для вас обозначение, например полдень, 13:30, 13:37 и т. д. чтобы описать, когда вы хотите, чтобы задача произошла.
Подождите несколько минут, а затем убедитесь, что ваша задача запущена, запустив команду cat или tac для созданного вами файла:
Планирование задания с помощью
Вам не нужно использовать интерактивную подсказку для планирования заданий с . Вместо этого вы можете передать ему команды, используя echo или printf . В этом примере я использую обозначение сейчас и на сколько минут я хочу, чтобы задача была отложена:
Команда at — это утилита командной строки Linux, используемая для планирования задания для последующего выполнения. Утилита считывает команды из стандартного ввода и группирует их в задание at, которое выполняется только один раз.
Альтернативой at является задание cron. Однако в то время как задания at выполняются только один раз, задания cron являются повторяющимися событиями.
В этом руководстве вы научитесь использовать команду at и увидите полезные примеры планирования команд.
- Система под управлением Linux.
- Учетная запись пользователя с правами sudo.
Установить команду at
В зависимости от того, какой дистрибутив Linux вы используете, команда at может быть не установлена заранее.
Проверьте, установлен ли at, введя имя команды в терминале:
Если утилита не установлена предварительно, в выходном сообщении будет указано Команда 'at' не найдена.
Установить в Ubuntu и Debian
Для установки в Ubuntu или Debian выполните следующие шаги:
<р>1. Обновите репозиторий пакетов: <р>2. Установите команду at, выполнив:Установить в CentOS и Fedora
Для установки в CentOS или Fedora выполните следующие шаги:
<р>1. Обновите репозиторий пакетов: <р>2. Выполните следующую команду для установки по адресу:Включить демон планирования
Демон планирования работает в фоновом режиме и своевременно выполняет запланированные задания.
Выполните следующую команду после установки пакета at, чтобы включить демон планирования atd и настроить его на запуск при загрузке системы.
Linux и синтаксис команд и параметры
Синтаксис команды at:
В приведенном выше примере мы запланировали задание на 17:00, после чего открывается интерактивная подсказка. Запланированное задание заключается в выполнении команды echo, и утилита использует стандартную оболочку bash.
Передать задание по адресу
Запланируйте задание без интерактивной подсказки at, передав команды at и указав время выполнения. Используйте echo или printf для передачи команд в at .
Чтобы запланировать задание at, которое отправляет выходные данные команды echo в файл, используйте:
Используйте команду cat, чтобы проверить, существует ли файл, чтобы убедиться, что задание выполнено:
Просмотреть запланированное задание
Параметр -c отображает содержимое ранее запланированного задания.Эта опция полезна, если вы забыли, что это за задание, или хотите проверить запланированное время.
Просмотрите содержимое запланированного задания, используя следующий синтаксис:
Получите номер задания, выполнив сначала команду atq, чтобы получить список всех ожидающих заданий.
В приведенном выше примере мы сначала запросили список всех ожидающих заданий, чтобы получить номера заданий, а затем показали содержимое задания 14 в стандартном выводе.
Список запланированных заданий
Утилита at позволяет просматривать, какие задания все еще находятся в очереди и ожидают выполнения. Есть два способа просмотреть ожидающие задания:
Вывод показывает номер ожидающего задания, дату, время, год и очередь для текущего пользователя. Чтобы получить список ожидающих выполнения заданий всех пользователей, запустите команду с помощью sudo .
В приведенном выше примере запуск atq показывает ожидающие задания только для текущего пользователя. Запуск atq с помощью sudo показывает незавершенные задания для всех пользователей.
Отправить уведомление по электронной почте при выполнении
Утилита at по умолчанию отправляет уведомления по электронной почте о выполненных заданиях. Для уведомлений по электронной почте требуется рабочий адрес электронной почты, настроенный для вашей учетной записи пользователя, и система должна иметь возможность отправлять электронные письма.
Чтобы указать at отправлять уведомления по электронной почте о завершении задания, даже если нет вывода, укажите параметр -m.
Приведенная выше команда назначает задание на завтра в текущее время. По завершении утилита at уведомляет пользователя, используя адрес электронной почты, настроенный для пользователя bosko.
Выполнение заданий без уведомления
Чтобы не получать уведомления по электронной почте о выполненных заданиях, укажите параметр -M при планировании задания.
В приведенном выше примере мы запланировали отключение системы на полночь и использовали параметр -M, чтобы запретить утилите отправлять уведомление по электронной почте.
Удалить запланированное задание
Чтобы удалить запланированные задания at, укажите параметр -r или запустите команду atrm вместе с идентификатором задания. Получите идентификатор задания, запустив atq или используя параметр -l.
В следующем примере мы удалили задание 12:
Ограничить пользователей
Пакет at использует два файла для ограничения доступа к командам at и пакетного доступа:
Редактируйте файлы, чтобы только определенные пользователи могли создавать, удалять или отображать ожидающие выполнения задания. Файлы представляют собой список имен пользователей, которые могут или не могут получить доступ к командам at. Символ новой строки разделяет имена пользователей, а пробелы не допускаются.
Важно: если файл /etc/at.allow существует, только перечисленные в нем пользователи могут использовать at или batch , а файл /etc/at.deny игнорируется. Если файл /etc/at.allow не существует, пользователи, перечисленные в /etc/at.deny, не могут использовать at или batch . Пользователь root всегда может выполнять команды at, независимо от файлов управления доступом.
Отредактируйте файл /etc/at.deny с привилегиями sudo, чтобы запретить пользователю доступ к командам at. В следующем примере мы редактировали файл с помощью редактора vi:
После добавления имени пользователя в список выполнение команды at с использованием ограниченной учетной записи пользователя приводит к следующему сообщению:
Выполнять задания, когда позволяет загрузка системы
Пакетная команда (параметр -b) планирует выполнение задания at, когда средняя загрузка системы падает ниже 1,5. Выполнение заданий при низкой нагрузке на систему предотвращает потребление всех системных ресурсов и обеспечивает оптимальную работу системы.
Примечание. Используйте команду top, чтобы проверить уровень загрузки системы и использование ресурсов.
Например, следующее задание выполняется, как только загрузка системы падает ниже 1,5:
В этом руководстве показано, как установить и использовать команду at в Linux. Используйте утилиту at, чтобы запланировать одноразовые задания и не забыть запустить их позже. Утилита представляет собой альтернативу заданиям cron с более простым синтаксисом и отсутствием повторного выполнения.
Чтобы узнать о других полезных командах Linux, ознакомьтесь с нашей памяткой по командам Linux, где собраны все важные команды Linux.
выводит список незавершенных заданий пользователя, если пользователь не является суперпользователем; в этом случае перечислены все рабочие места. Формат выходных строк (по одной для каждого задания): номер задания, дата, час, очередь и имя пользователя.
удаляет задания, идентифицируемые по номеру задания.
выполняет команды, когда позволяют уровни загрузки системы; другими словами, когда среднее значение нагрузки падает ниже 0,8 или значения, указанного при вызове atd. At позволяет довольно сложные спецификации времени, расширяя стандарт POSIX.2. Он принимает время в формате ЧЧ:ММ для запуска задания в определенное время дня. (Если это время уже прошло, предполагается, что это следующий день.) Вы также можете указать полночь, полдень или время чая (16:00), а также указать время суток с суффиксом AM или PM для бега по утрам или вечер. Вы также можете указать, в какой день будет выполняться задание, указав дату в форме месяц-имя дня с необязательным годом или указав дату в форме ММДДГГ или ММ/ДД/ГГ или ДД.ММ.ГГ или ГГГГ. -ММ-ДД. Спецификация даты должна соответствовать спецификации времени суток. Вы также можете указать время, например, сейчас + количество единиц времени, где единицами времени могут быть минуты, часы, дни или недели. сегодня и запустить задание завтра, добавив к времени завтра.
Например, чтобы запустить задание в 16:00 через три дня, вы должны сделать это в 16:00 + 3 дня, чтобы запустить задание в 10:00 31 июля, вы должны сделать это в 10:00 31 июля, а чтобы запустить задание в 1:00 завтра, вы бы сделали в 1:00 завтра.
Точное определение спецификации времени можно найти в /usr/share/doc/at-3.1.10/timespec.
Как в at, так и в пакетном режиме команды считываются из стандартного ввода или из файла, указанного с помощью параметра -f, и выполняются. Рабочий каталог, окружение (кроме переменных TERM, DISPLAY и _) и umask сохраняются с момента вызова. Команда at или batch, вызванная из оболочки su(1), сохранит текущий идентификатор пользователя. Пользователю будет отправлена стандартная ошибка и стандартный вывод его команд, если таковые имеются. Почта будет отправлена с помощью команды /usr/sbin/sendmail. Если at выполняется из оболочки su(1), письмо получит владелец оболочки входа в систему.
Привилегированный пользователь может использовать эти команды в любом случае. Для других пользователей разрешение на использование определяется файлами /etc/at.allow и /etc/at.deny.
Если файл /etc/at.allow существует, только упомянутые в нем имена пользователей могут использоваться в нем.
Если /etc/at.allow не существует, проверяется /etc/at.deny, и каждое имя пользователя, не упомянутое в нем, разрешается использовать at.
Если ни того, ни другого не существует, только суперпользователь может использовать at.
Пустой /etc/at.deny означает, что каждому пользователю разрешено использовать эти команды, это конфигурация по умолчанию.
Параметры
выводит номер версии в стандартную ошибку. -q queue использует указанную очередь. Обозначение очереди состоит из одной буквы; допустимые обозначения очередей находятся в диапазоне от a до z. и от A до Z. Очередь a используется по умолчанию для at, а очередь b — для партии. Очереди с более высокими буквами выполняются с повышенной аккуратностью. Специальная очередь «Чт, 20 февраля, 14:50:00 1997». -с
выводит задания, перечисленные в командной строке, в стандартный вывод. -t time_arg Отправить задание для выполнения во время, указанное аргументом параметра time_arg, который должен иметь тот же формат, что и для аргумента параметра времени -t утилиты touch(1) ([[CC ]ГГ]ММДДччмм).
Окружающая среда
Значение переменной среды SHELL во время вызова at определяет, какая оболочка используется для выполнения команд at job. Если SHELL не установлен при вызове at, будет использоваться оболочка входа пользователя; в противном случае, если SHELL задан при вызове at, он должен содержать путь к исполняемому файлу интерпретатора оболочки, который будет использоваться для запуска команд в указанное время. at будет записывать значения переменных среды, присутствующих во время вызова. Когда команды запускаются в указанное время, at восстанавливает эти переменные до их записанных значений. Эти переменные исключаются из этой обработки и никогда не устанавливаются at при выполнении команд:
TERM, DISPLAY, SHELLOPTS, _, PPID, BASH_VERSINFO, EUID, UID, GROUPS.
Если пользователь, отправляющий задание at, не является суперпользователем, переменные, изменяющие поведение загрузчика ld.so(8), такие как LD_LIBRARY_PATH, не могут быть записаны и восстановлены at.
Файлы
/var/spool/at
/var/spool/at/spool
/proc/loadavg
/var/run/utmp
/etc/at .разрешить
/etc/at.deny
См. также
cron(1), nice(1), sh(1), umask(2), atd(8).
Правильная работа пакета для Linux зависит от наличия каталога типа proc, смонтированного в /proc.
Если файл /var/run/utmp недоступен или поврежден, или если пользователь не вошел в систему во время вызова at, сообщение отправляется на идентификатор пользователя, указанный в переменная окружения LOGNAME. Если он не определен или пуст, предполагается текущий идентификатор пользователя.
At и пакетная обработка в том виде, в каком они реализованы в настоящее время, не подходят, когда пользователи конкурируют за ресурсы. Если это относится к вашему сайту, вы можете рассмотреть возможность использования другой пакетной системы, например nqs.
Читайте также: