Команда at планировщик linux

Как использовать at и пакет в Linux для планирования команд

Если вы хотите запланировать задание Linux, которое будет выполняться только один раз, cron будет излишним. Семейство команд at — это то, что вам нужно! А если вы хотите запускать процессы только тогда, когда в вашей системе есть свободные ресурсы, вы можете использовать batch .

Как планировать задания Linux

Демон cron поддерживает список заданий, которые он запускает в определенное время. Эти задачи и программы выполняются в фоновом режиме в запланированное время. Это дает вам большую гибкость для планирования задач, которые необходимо повторять. Если вам нужно запускать задачу каждый час, в определенное время каждый день, раз в месяц или год, вы можете настроить ее в cron .

Однако это не поможет, если вы хотите запланировать выполнение задачи только один раз. Конечно, вы можете настроить его в cron , но тогда вам придется не забыть вернуться и удалить запись из crontab после выполнения задачи, что неудобно.

В Linux, если вы боретесь с проблемой, это почти гарантия того, что кто-то другой тоже боролся с ней. К счастью, поскольку Unix-подобные операционные системы существуют так давно, велика вероятность того, что кто-то создал решение вашей проблемы.

Для описанной выше проблемы они есть, и она называется at .

Установка команды at

Нам пришлось установить at в Ubuntu 18.04 и Manjaro 18.1.0 (он уже был установлен в Fedora 31).

Чтобы установить at в Ubuntu, используйте эту команду:

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

sudo systemctl enable --now atd.service

В Manjaro вы устанавливаете at с помощью этой команды:

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

sudo systemctl enable --now atd.service

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

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

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

Однако, несмотря на то, что мы собираемся использовать at в интерактивном режиме, вы должны указать дату и время заранее. Если вы ничего не укажете в командной строке или введете что-то, что не является датой и временем, at отвечает «Искаженное время», как показано ниже:

Даты и время могут быть явными или относительными. Например, допустим, вы хотите, чтобы команда выполнялась через одну минуту. at знает, что означает «сейчас», поэтому вы можете использовать now и добавить к нему одну минуту, например:

at распечатывает сообщение и приглашение at и ждет, пока вы введете команды, которые хотите запланировать. Однако сначала рассмотрим сообщение, как показано ниже:

Он сообщает вам, что at запускает экземпляр оболочки sh и запускает внутри него команды. Ваши команды не будут выполняться в оболочке Bash, которая совместима с оболочкой sh , но имеет более богатый набор функций.

Если ваши команды или сценарии попытаются использовать функцию или средство, предоставляемое Bash, но sh этого не сделает, они потерпят неудачу.

Читайте также:  Console commands for linux

Легко проверить, будут ли ваши команды или сценарии выполняться в sh . Используйте команду sh для запуска оболочки sh :

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

Чтобы вернуться в оболочку Bash, введите команду exit :

Вы не увидите стандартного вывода или сообщений об ошибках команд. Это связано с тем, что оболочка sh запускается как фоновая задача и работает без какого-либо экранного интерфейса.

Любой вывод команд — хороший или плохой — отправляется вам по электронной почте. Он отправляется через внутреннюю почтовую систему тому, кто запускает команду at . Это означает, что вам необходимо установить и настроить эту внутреннюю систему электронной почты.

Многие (большинство) систем Linux не имеют внутренней системы электронной почты, поскольку в ней редко возникает необходимость. Те, которые это делают, обычно используют такие системы, как sendmail или postfix. Если в вашей системе нет внутренней системы электронной почты, вы можете использовать сценарии для записи в файлы или перенаправления вывода в файлы для добавления ведения журнала.

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

Теперь пришло время ввести команду в at . В этом примере мы будем использовать небольшой файл сценария с именем sweep.sh , который удаляет *.bak , *.tmp и *.o . Введите путь к команде, как показано ниже, и нажмите Enter.

Появится еще одна командная строка, и вы можете добавить столько команд, сколько захотите. Обычно удобнее иметь команды в одном скрипте и просто вызывать этот скрипт из at .

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

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

Если нет почты, вы должны предположить успех. Конечно, в этом случае вы можете проверить и посмотреть, не были ли удалены файлы *.bak , *.tmp и *.o . чтобы подтвердить, что команда сработала.

Введите следующее, чтобы запустить все это снова:

Через одну минуту введите следующее, чтобы перепроверить почту:

Эй, у нас есть почта! Чтобы прочитать сообщение номер один, нажмите 1, а затем нажмите Enter.

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

Нажмите D+Enter, чтобы удалить письмо, и Q+Enter, чтобы выйти из почтовой программы.

Форматы даты и времени

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

Глядя на очередь заданий

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

Для каждой команды в очереди atq отображает следующую информацию:

  • Идентификатор задания
  • Запланированная дата
  • Запланированное время
  • Поставить задание в очередь. Очереди помечены «a», «b» и так далее. Обычные задачи, которые вы планируете с помощью at , помещаются в очередь a, а задачи, которые вы планируете с помощью batch (описано далее в этой статье), помещаются в очередь b.
  • Человек, запланировавший задание.
Читайте также:  Настройка сети через командную строку linux

Использование в командной строке

Вам не нужно использовать at в интерактивном режиме; вы также можете использовать его в команде. Это упрощает использование внутри скриптов.

Вы можете передавать команды в at , например:

echo "sh ~/sweep.sh" | at 08:45 AM

Задание принимается и назначается в , а номер задания и дата выполнения сообщаются так же, как и раньше.

Использование at с файлами команд

Вы также можете сохранить последовательность команд в файле, а затем передать ее в at . Это может быть обычный текстовый файл с командами — это не обязательно должен быть исполняемый скрипт.

Вы можете использовать параметр -f (файл) следующим образом, чтобы передать имя файла в at :

at now + 5 minutes -f clean.txt

Вы можете добиться того же результата, если перенаправите файл в at :

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

Чтобы удалить запланированное задание из очереди, вы можете использовать команду atrm . Если вы хотите сначала увидеть очередь, чтобы найти номер задания, которое вы хотите удалить, вы можете использовать atq . Затем используйте этот номер задания с atrm , как показано ниже:

Как просмотреть подробный обзор вакансий

Как мы упоминали ранее, вы можете планировать задания на далекое будущее. Иногда вы можете забыть, что будет делать работа. Команда atq показывает задания в очереди, но не то, что они собираются делать. Если вы хотите увидеть подробное представление задания, вы можете использовать параметр -c (cat).

Во-первых, мы будем использовать atq , чтобы найти номер задания:

Теперь мы будем использовать задание номер 13 с опцией -c :

Вот разбивка информации, которую мы получаем о работе:

  • Первая строка: сообщает нам, что команды будут выполняться в оболочке sh .
  • Вторая строка: мы видим, что команды будут выполняться с идентификатором пользователя и группы, равным 1000. Это значения для человека, который выполнил команду at .
  • Третья строка: человек, который получает электронные письма в отправляет.
  • Четвертая строка: Маска пользователя – 22. Эта маска используется для установки разрешений по умолчанию для любых файлов, созданных в этом сеансе sh . Маска вычитается из 666, что дает нам 644 (восьмеричный эквивалент rw-r—r— ).
  • Остальные данные. Большинство — это переменные среды.

  • Результаты теста. Тест проверяет доступность каталога выполнения. Если это невозможно, возникает ошибка, и выполнение задания прекращается.
  • Команды, которые необходимо выполнить. Они перечислены, а также отображается содержимое запланированных сценариев. Обратите внимание, что хотя скрипт в нашем примере выше был написан для работы в Bash, он все равно будет выполняться в оболочке sh .

Пакетная команда

Команда batch работает аналогично команде at , но с тремя существенными отличиями:

  1. Команду batch можно использовать только в интерактивном режиме.
  2. Вместо планирования выполнения заданий в определенное время вы добавляете их в очередь, и команда batch выполняет их, когда средняя загрузка системы ниже 1,5.
  3. Из-за вышеизложенного вы никогда не указываете дату и время с помощью команды batch .

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

Затем добавьте задачи так же, как с помощью команды at .

Управление доступом к команде at

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

  • at.deny : список приложений и объектов, которые не могут использовать at для планирования заданий.
  • at.allow : список тех, кто может использовать at для планирования заданий. Если файл at.allow не существует, at использует только файл at.deny .
Читайте также:  Linux open file descriptors

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

Вот как выглядит файл at.deny :

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

Теперь мы отредактируем файл at.allow . Мы собираемся добавить dave и mary , но никому больше не будет разрешено использовать at .

Сначала мы набираем следующее:

В редакторе мы добавляем два имени, как показано ниже, а затем сохраняем файл.

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

Ему будет отказано, как показано ниже.

Опять же, eric отсутствует в файле at.deny . Как только вы поместите кого-либо в файл at.allow , всем и каждому будет отказано в разрешении на использование at .

Отлично подходит для одноразовых

Как видите, как at , так и batch идеально подходят для задач, которые нужно выполнить только один раз. Опять же, как краткий обзор:

  • Если вам нужно сделать что-то необычное, запланируйте это с помощью at .
  • Если вы хотите запускать задачу только при достаточно низкой нагрузке на систему, используйте batch .
Linux Commands
Files tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm · scp · gzip · chattr · cut · find · umask · wc
Processes alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg · pidof · nohup · pmap
Networking netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw · arping · firewalld

RELATED: Best Linux Laptops for Developers and Enthusiasts

Источник

Оцените статью
Adblock
detector