Отложенный запуск команды linux
Обновлено: 21.11.2024
Эта команда используется для задержки выполнения программы или выполнения команды в фоновом режиме в будущем. Он имеет несколько форм, в зависимости от первого аргумента команды: после ms Ms должно быть целым числом, указывающим время в миллисекундах. Команда спит в течение мс миллисекунд, а затем возвращается. Пока команда спит, приложение не реагирует на события. после мс? скрипт скрипт скрипт. ? В этой форме команда возвращается немедленно, но она обеспечивает выполнение команды Tcl через миллисекунды позже в качестве обработчика события. Команда будет выполнена ровно один раз в заданное время. Отложенная команда формируется путем объединения всех аргументов скрипта таким же образом, как и команда concat. Команда будет выполнена на глобальном уровне (вне контекста любой процедуры Tcl). Если при выполнении отложенной команды возникает ошибка, то фоновая ошибка будет сообщена командой, зарегистрированной с помощью interp bgerror. Команда after возвращает идентификатор, который можно использовать для отмены отложенной команды с помощью after cancel . after cancel id Отменяет выполнение ранее запланированной отложенной команды. Id указывает, какую команду следует отменить; это должно быть значение, возвращаемое предыдущей командой after. Если команда, заданная идентификатором, уже была выполнена, то команда после отмены не действует. после отмены скрипт скрипт . Эта команда также отменяет выполнение отложенной команды. Аргументы сценария объединяются вместе с разделителями-пробелами (так же, как в команде concat). Если есть ожидающая команда, соответствующая строке, она отменяется и никогда не будет выполнена; если в данный момент такой команды нет, то команда после отмены не действует. после бездействующего скрипта? скрипт скрипт. ? Объединяет аргументы сценария вместе с разделителями-пробелами (так же, как в команде concat) и обеспечивает последующую оценку результирующего сценария как обратный вызов бездействия. Сценарий будет запущен ровно один раз, в следующий раз, когда будет введен цикл событий и нет событий для обработки. Команда возвращает идентификатор, который можно использовать для отмены отложенной команды с помощью after cancel . Если во время выполнения скрипта возникает ошибка, то фоновая ошибка будет сообщена командой, зарегистрированной с помощью interp bgerror. после информации? я бы ? Эта команда возвращает информацию о существующих обработчиках событий. Если аргумент id не указан, команда возвращает список идентификаторов для всех существующих обработчиков событий, созданных командой after для этого интерпретатора. Если указан идентификатор, он указывает существующий обработчик; id должен быть возвращаемым значением из какого-то предыдущего вызова after, и он еще не должен быть запущен или отменен. В этом случае команда возвращает список из двух элементов. Первый элемент списка — это скрипт, связанный с id , а второй элемент — либо неактивный, либо таймер, чтобы указать, какой это обработчик событий.
Формы команды after ms и after idle предполагают, что приложение управляется событиями: отложенные команды не будут выполняться, пока приложение не войдет в цикл обработки событий. В приложениях, которые обычно не управляются событиями, таких как tclsh , цикл обработки событий можно запустить с помощью команд vwait и update.
ПРИМЕРЫ
Это обеспечивает выполнение команды wake_up через восемь часов (при условии, что в это время активен цикл обработки событий):
Следующую команду можно использовать для выполнения длительных вычислений (представленных здесь ::my_calc::one_step , которая, как предполагается, возвращает логическое значение, указывающее, следует ли выполнять еще один шаг) в пошаговом режиме. , хотя сам расчет должен быть организован так, чтобы он мог работать поэтапно. Этот метод обеспечивает особую осторожность, чтобы гарантировать, что цикл обработки событий не будет голодать из-за перепланирования шагов обработки (организация выполнения следующего шага с использованием уже запущенного события таймера только тогда, когда очередь событий будет опустошена) и полезна, когда вы хотите убедиться, что графический интерфейс Tk остается отзывчивым во время медленной задачи.
Когда пользователь вводит последовательность из нескольких команд в Linux, команды выполняются сразу одна за другой или одновременно (например, команда tee). Однако иногда необходимо отложить выполнение команд и предоставить системе достаточно времени для получения ожидаемых результатов.
В этом руководстве вы узнаете, как использовать команду сна Linux для задержки выполнения команд в сценариях терминала и оболочки.
- Система под управлением Linux
- Доступ к командной строке
Что делает команда sleep в Linux?
Команда sleep приостанавливает процесс вызова следующей команды на указанное время. Это свойство полезно, когда выполнение следующей команды зависит от успешного завершения предыдущей команды.
Объяснение синтаксиса команды sleep в Linux
Синтаксис команды sleep прост:
В приведенном выше примере после выполнения sleep 5 вторая командная строка появилась с 5-секундной задержкой.
По умолчанию система считывает число после сна как количество секунд. Чтобы указать другие единицы времени, используйте следующий синтаксис:
Команда sleep принимает числа с плавающей запятой. Он позволяет использовать несколько значений, которые суммируются для расчета продолжительности сна .
Чтобы остановить спящий режим после его начала и до окончания указанного периода ожидания, нажмите Ctrl + C .
Чтобы просмотреть справку по команде sleep, введите:
Чтобы узнать о версии, введите:
Примеры команд сна в Linux
Следующие разделы содержат примеры использования команды sleep в терминале или сценариях оболочки.
Примечание. Команда sleep предназначена для работы в сочетании с другими командами Linux. Чтобы получить список доступных команд Linux, загрузите нашу бесплатную памятку по командам Linux.
Установить будильник
Используйте спящий режим, чтобы заставить систему воспроизвести mp3-файл через определенное время. В примере используется mplayer:
Команды задержки в терминале
sleep полезен для обеспечения времени между выполнением двух команд. В следующем примере эхо-команды выполняются с интервалом в одну секунду:
Назначить переменную команде sleep
Команде сна можно назначить переменную. Рассмотрим следующий сценарий оболочки:
Сценарий определяет переменную с именем SLEEP_INTERVAL, значение которой позже используется в качестве аргумента для команды sleep. Вывод этого примера скрипта показывает, что выполнение длилось 30 секунд:
Определить интервалы проверки
В следующем примере показано использование команды sleep в сценарии, который проверяет, находится ли веб-сайт в сети. Сценарий останавливается, если успешно проверяет связь с веб-сайтом, а спящий режим вводит 10-секундную задержку между неудачными попытками проверки связи.
Разрешить время для завершения операции
Возможно, вы используете сценарий bash, который внутри вызывает два других сценария bash: один запускает тесты в фоновом режиме, а другой печатает результаты. Используйте спящий режим, чтобы второй скрипт не печатал неправильные результаты, если он выполняется до завершения первого скрипта:
Команда kill -0 $BACK_PID проверяет, запущен ли процесс первого скрипта. Если это так, он печатает сообщение и приостанавливается на 1 секунду перед повторной проверкой.
Прогнозировать задержку
Используйте спящий режим, чтобы разрешить задержку выполнения определенных команд. Фрагмент сценария ниже показывает, как спящий режим дает ЦП достаточно времени для выполнения вычислений перед следующей итерацией.
После прочтения этого руководства вы должны знать, как использовать команду сна Linux для приостановки выполнения команд в последовательности.
Команда bash wait — это команда оболочки, которая ожидает завершения фоновых процессов и возвращает статус выхода. В отличие от команды sleep, которая ожидает определенное время, команда ожидания ожидает завершения всех или определенных фоновых задач.
Некоторые среды рабочего стола, такие как GNOME, поддерживают параметр автозапуска, называемый X-GNOME-Autostart-Delay, для запуска приложений с задержкой после входа в систему.
Для других сред рабочего стола, где параметр задержки запуска недоступен в графическом интерфейсе, вы можете вручную отредактировать файл рабочего стола автозапуска, чтобы добавить этот параметр самостоятельно.
Ищите файл рабочего стола автозапуска либо в ~/.config/autostart для вашего пользователя, либо в /etc/xdg/autostart для всех пользователей, откройте файл в текстовом редакторе, например Nano (например, nano ~/.config/ autostart/ .desktop ) и добавьте это в файл, ничего больше не изменяя:
Где xx — это задержка запуска, которую вы хотите добавить к этому приложению, в секундах.
Пример записи рабочего стола с автоматическим запуском, к которой я добавил X-GNOME-Autostart-Delay с задержкой в 10 секунд:
2. Добавить задержку запуска для некоторых приложений, использующих спящий режим
Если среда вашего рабочего стола не поддерживает параметр X-GNOME-Autostart-Delay, вы можете использовать общий способ запуска приложений при запуске с задержкой.
Для этого найдите файл рабочего стола автозапуска приложения/команды либо в ~/.config/autostart для вашего пользователя, либо в /etc/xdg/autostart для всех пользователей. Вам нужно будет открыть этот файл в текстовом редакторе (от имени root, если он из /etc/xdg/autostart ), чтобы добавить задержку запуска.
В этом файле рабочего стола автозапуска измените значение Exec следующим образом: bash -c "sleep && " . Где xx – количество секунд, которое нужно добавить в качестве задержки запуска для этой original_command .
Пример запуска рабочего стола, в котором я запускаю приложение "MyApp" с 7-секундной задержкой запуска:
После этого выйдите из системы, а при повторном входе приложение должно запуститься автоматически с задержкой, указанной в файле запуска рабочего стола.
Хотите замедлить работу скрипта BASH? Используйте команду сна
Гэри Ньюэлл был внештатным сотрудником, разработчиком приложений и тестировщиком программного обеспечения с более чем 20-летним опытом работы в сфере ИТ, работая с Linux, UNIX и Windows.
Крис Селф (Chris Selph) — сертифицированный CompTIA преподаватель технологии и профессиональный преподаватель информационных технологий. Он также работает администратором сети и сервера и выполняет обслуживание и ремонт компьютеров для многочисленных клиентов.
Что нужно знать
В этой статье объясняется, как использовать команду сна Linux для приостановки сценария bash, среди прочего. Сама по себе команда сна не очень полезна. Однако как часть скрипта его можно использовать по-разному. Например, вы можете использовать его, чтобы приостановить выполнение скрипта перед повторным выполнением команды, которая не удалась в первый раз.
Пример использования команды Sleep
Представьте, что у вас есть скрипт, который обрабатывает файлы, загруженные с другого сервера. Сценарий не должен запускать процесс копирования, пока все файлы не закончат загрузку. Процесс загрузки выполняется отдельным скриптом, который запускается перед вашим.
Сценарий, который копирует файлы, может содержать цикл для проверки того, все ли файлы были загружены (он делает это, проверяя, найдено ли 50 файлов перед началом процесса копирования).
Нет смысла в постоянном тестировании скрипта, так как при этом используется процессорное время. Вместо этого вы можете сделать паузу на несколько минут между каждым тестом, прежде чем повторить попытку. Команда сна идеальна в таких обстоятельствах.
Как использовать команду сна
Чтобы использовать команду сна Linux, введите в окне терминала следующее:
Приведенная выше команда заставляет терминал приостановить работу на 5 секунд перед возвратом в командную строку.
Для команды sleep требуется ключевое слово sleep, за которым следует число, которое вы хотите приостановить, и единица измерения.
Вы можете указать задержку в секундах, минутах, часах или днях.
Чтобы приостановить выполнение скрипта на несколько дней, используйте задание cron для запуска скрипта через равные промежутки времени, а не запускайте скрипт в фоновом режиме в течение нескольких дней.
Задание cron — это команда или сценарий Linux, запуск которого можно запланировать в определенное время или день. Они полезны для повторяющихся задач в течение длительного периода времени.
Число для интервала команды сна не обязательно должно быть целым числом. Вы также можете использовать числа с плавающей запятой.
Например, следующий синтаксис включает доли секунды:
Пример использования команды Sleep
Следующий скрипт показывает, как использовать команду sleep для создания часов обратного отсчета на базе терминала:
Вот как работает этот скрипт:
- Сценарий устанавливает для переменной x значение 10.
- Цикл while продолжает повторяться, пока значение x больше нуля.
- Команда sleep приостанавливает выполнение скрипта на 1 секунду каждый раз в цикле.
- Остальная часть скрипта очищает экран при каждой итерации, отображает сообщение "x секунд до взлета" и вычитает 1 из значения x.
Без команды sleep сценарий будет масштабироваться, а сообщения будут отображаться слишком быстро.
Как использовать переключатели команд сна
У команды sleep всего пара переключателей.
Переключатель --help показывает файл справки для команды sleep. Вы можете добиться того же, используя команду man следующим образом:
Переключатель --version показывает версию команды sleep, установленную в системе.
Информация, возвращаемая параметром --version, выглядит следующим образом:
- Номер версии
- Сведения об авторских правах
- Лицензия
- Авторы
Приостановка команд терминала с переходом в спящий режим
Еще одно полезное применение команды sleep — приостановка команд, которые вы вводите в окне терминала.
При желании вы можете ввести две команды подряд, дождавшись завершения первой, прежде чем вводить вторую.
Однако более быстрый подход — набрать две команды в одной строке, а между ними поставить команду sleep:
$ cd /mydirectory/ && sleep 3 && ls
Как работает эта команда:
- Команда cd /mydirectory/ изменяет каталог.
- Команда sleep 3 ожидает завершения команды cd три секунды.
- Команда ls выполняется и отображает содержимое каталога.
Для такого простого примера, как этот, команда sleep экономит лишь немного времени. Однако если у вас длинный список команд, возможность вводить команды в одной строке экономит время.
Читайте также: