Отложенное выполнение команды linux

Команда at в Linux

at — это утилита командной строки, которая позволяет вам планировать выполнение команд в определенное время. Задания, созданные с помощью at , выполняются только один раз.

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

Установка at

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

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

sudo apt update sudo apt install at

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

sudo systemctl enable --now atd

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

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

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

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

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

warning: commands will be executed using /bin/sh at> 

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

tar -xf /home/linuxize/file.tar.gz

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

at> job 4 at Tue May 5 09:00:00 2020 

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

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

echo "command_to_be_run" | at 09:00

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

at 09:00 command_to_be_runEND

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

at 09:00 -f /home/linuxize/script.sh

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

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

batch команда

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

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

echo "command_to_be_run" | batch

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

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

  • Время — чтобы указать время, используйте форму HH:MM или HHMM . Чтобы указать 12-часовой формат времени, используйте am или pm после времени. Вы также можете использовать такие строки, как now , midnight , noon или teatime (16:00). По истечении указанного времени задание будет выполнено на следующий день.
  • Дата — команда позволяет запланировать выполнение задания на заданную дату. Дату можно указать, используя название месяца, за которым следует день и (необязательно) год. Вы можете использовать строки, например, today , tomorrow или будний день. Дата также может быть указана в MMDD[CC]YY , MM/DD/[CC]YY , DD.MM.[CC]YY или [CC]YY-MM-DD .
  • Increment — at также принимает приращения в формате now + count time-unit , где count — это число, а time-unit может быть одной из следующих строк: minutes , hours , days или weeks .

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

    Запланируйте работу на ближайшее воскресенье на время на десять минут позже текущего:

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

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

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

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

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

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

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

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

9 Tue May 5 12:22:00 2020 a linuxize 12 Wed Oct 21 12:30:00 2020 a linuxize 15 Tue May 5 09:00:00 2020 a linuxize 6 Tue May 5 09:00:00 2020 a linuxize 13 Mon May 4 23:08:00 2020 a linuxize 11 Wed Jul 1 10:00:00 2020 a linuxize 4 Tue May 5 09:00:00 2020 a linuxize 

Когда 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 в вашем терминале.

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

Источник

Команда sleep в bash: делаем задержки в скриптах

При написании shell-скрипта может возникнуть необходимость создать в нем паузу в несколько секунд перед выполнением очередного шага. Например, чтобы скрипт «подождал», пока завершится какой-то процесс, или сделал паузу перед повторной попыткой выполнить неудавшуюся команду.

Для этого существует очень простая команда sleep .

Как используется команда sleep в bash

Sleep — универсальная команда с простым синтаксисом. Все, что нужно сделать, это набрать sleep N . Это поставит ваш скрипт на паузу на N секунд. Секунды можно указывать в целых положительных числах или в числах с плавающей запятой.

Рассмотрим базовый пример:

echo "Hello there!" sleep 2 echo "Oops! I fell asleep for a couple seconds!"

Результат работы этого скрипта выглядит так:

Аналогично можно использовать число с плавающей запятой: это позволит указать доли секунды. Например, sleep .8 приостановит работу скрипта на 0,8 с.

Вот и все, что можно сказать о работе команды sleep на базовом уровне!

Что нужно иметь в виду, используя команду sleep

По умолчанию время для sleep указывается в секундах, поэтому в примере мы не указывали единицы измерения времени.

На некоторых типах машин (конкретно — BSD и MacOS) время вообще указывается исключительно в секундах. В других Unix-подобных операционных системах скорее всего будут поддерживаться и другие единицы времени:

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

Например, указав sleep 2m 30s , вы создадите паузу на 2,5 минуты. Имейте в виду, что в MacOS или BSD для такого результата нужно написать sleep 150 , поскольку в этих ОС время указывается только в секундах, а 2,5 мин = 150 с.

Итоги

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

Источник

6 полезных примеров команды sleep в Linux

Программисты Linux и системные администраторы предпочитают писать сценарии оболочки для автоматизации простых задач. Однако написать надежный сценарий – задача не из легких. Нам нужно решить множество угловых ситуаций, таких как – механизм повторных попыток, отладка, протоколирование, отчет об ошибках и т.д.

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

Синтаксис команды sleep

Синтаксис команды sleep очень прост, поскольку она принимает один обязательный параметр с необязательным суффиксом:

Важно отметить, что в приведенном выше синтаксисе нет пробела между NUMBER и SUFFIX .

1. Как задержать выполнение команды Linux

По умолчанию команда sleep ожидает в течение нескольких секунд. Чтобы понять это, давайте напечатаем текущее время до и после команды sleep:

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

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

Как использовать команду sleep в Linux 6 полезных примеров

2. Как заставить команду ждать N минут

Опционально команда sleep позволяет нам указать единицу времени с помощью суффиксов. Мы можем использовать следующие суффиксы с командой sleep:

  • s – для указания единиц времени в секундах.
  • m – для указания единиц времени в минутах.
  • h – для указания единиц времени в часах.
  • d – для указания единиц времени в днях.

Так, давайте используем суффикс m, чтобы поспать 1 минуту:

Как использовать команду sleep в Linux 6 полезных примеров

Важный момент, который следует отметить – между NUMBER и SUFFIX не должно быть пробела.

3. Как заставить команду спать в течение X минут и секунд

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

Чтобы понять это, давайте воспользуемся следующей командой для сна в течение 1 минуты и 20 секунд:

date ' %r'; sleep 1m 20s; date ' %r'

В приведенном выше примере мы использовали два разных суффикса. Однако мы можем использовать и одинаковые суффиксы.

Например, мы можем использовать суффиксы 2s и 3s для сна в течение 5 секунд:

date ' %r'; sleep 2s 3s; date ' %r'

Как использовать команду sleep в Linux 6 полезных примеров

4. Как использовать числа с плавающей точкой в команде sleep

Дополнительно команда sleep также принимает на вход числа с плавающей точкой. Например, мы можем использовать значение 0.5s, чтобы поспать полсекунды:

date ' %r'; sleep 0.5s; date ' %r'

В приведенном выше выводе видно, что команда date показывает то же значение для единицы времени секунды.

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

date ' %r'; sleep 0.5m; date ' %r'

Как использовать команду sleep в Linux 6 полезных примеров

5. Как имитировать будильник с помощью команды sleep

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

Так, давайте воспользуемся следующей командой для установки будильника через 5 секунд:

Как использовать команду sleep в Linux 6 полезных примеров

Приведенная выше команда открывает файл alarm.mp3 с помощью медиаплеера VLC после ожидания в течение 5 минут. Как и любая другая команда Linux, мы можем использовать комбинацию клавиш ctrl + c , чтобы остановить медиаплеер VLC .

6. Как имитировать цифровые часы с помощью команды sleep

Чтобы имитировать цифровые часы, мы можем запустить команду sleep в бесконечном цикле через каждую секунду. Поясним это на примере.

Сначала напишем простой shell-скрипт под названием digital-clock.sh со следующим кодом:

#!/bin/bash while [ 1 ] do clear tput cup 5 30 date ' %r' sleep 1 done

В этом скрипте мы использовали команду tput, чтобы поместить курсор в строку №5 и колонку №30.

Теперь давайте запустим скрипт и посмотрим результат:

chmod x digital-clock.sh ./digital-clock.sh

Как использовать команду sleep в Linux 6 полезных примеров

Наконец, мы можем использовать комбинацию клавиш ctrl + c , чтобы остановить выполнение скрипта.

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

Источник

Читайте также:  Репозиторий пакетов astra linux
Оцените статью
Adblock
detector