sleep
Приостановка выполнения на заданное время — пауза между командами в скриптах
Описание
sleep — простая утилита, которая приостанавливает выполнение на указанный промежуток
времени. Без аргументов — ошибка; с числом — пауза в секундах по умолчанию. Суффикс задаёт единицу
времени: s (секунды), m (минуты), h (часы), d (дни).
Команда широко применяется в bash-скриптах: задержка между действиями, бесконечные циклы-мониторы
(while true; do ... && sleep 1; done), создание последовательности файлов с разными
временными метками, ожидание перед следующей командой.
Можно передать несколько аргументов — sleep 1m 30s выдержит паузу 1 минута 30 секунд.
Дробные значения допустимы: sleep 0.5 — полсекунды.
Синтаксис
- NUMBER — неотрицательное число (целое или дробное)
- SUFFIX — единица времени (не обязателен; по умолчанию секунды)
Можно указать несколько аргументов — они суммируются:
Суффиксы времени
| Суффикс | Единица | Пример |
|---|---|---|
s |
Секунды (по умолчанию; суффикс можно не указывать) | sleep 10s или sleep 10 |
m |
Минуты | sleep 5m |
h |
Часы | sleep 2h |
d |
Дни | sleep 1d |
sleep 0.5 — 500 мс; sleep 1.5m — 90 секунд.
Полезно для точных пауз между запросами к API или в тестах.
Паттерны использования
Бесконечный цикл-монитор
# Вывод сообщения каждую секунду while true; do echo "Alive" sleep 1 done # Короткая форма while true; do echo "Alive" && sleep 1; done
Классический паттерн наблюдения: повторять действие до прерывания (Ctrl+C).
Создание файлов с разными временными метками
for i in {1..5}; do
touch "file_$i.txt"
sleep 1
done
Пауза 1 секунда обеспечивает разные значения mtime у созданных файлов.
Ожидание перед командой
# Подождать 5 секунд и продолжить
echo "Starting in 5 seconds..."
sleep 5
echo "Starting now!"
# Задержка между попытками
for i in {1..3}; do
ping -c 1 example.com
sleep 2
done
Пауза перед запуском сервиса или повторными попытками подключения.
Скрипт создания файлов с датой
#!/bin/bash
# create_dated_files.sh
DATE=$(date '+%d-%m-%y')
for i in {1..5}; do
echo "log entry $i" > "log_${DATE}_$i.txt"
sleep 1
done
Из лекции (урок 15): создание лог-файлов с временными метками через паузы.
Совмещение нескольких аргументов
# Пауза 1 минута 30 секунд sleep 1m 30s # Пауза 2 часа (в скрипте резервного копирования) echo "Backup complete. Next in 2 hours." sleep 2h
Несколько аргументов суммируются — удобно вместо перевода в секунды вручную.
Цикл while с условием и sleep
#!/bin/bash # wait_for_file.sh counter=0 while [ ! -f /tmp/ready.flag ]; do echo "Waiting... ($counter sec)" sleep 1 ((counter++)) done echo "File appeared, continuing."
Ожидание появления файла-флага: цикл проверяет условие раз в секунду.
Минимальный рабочий пример
Скрипт с паузами, демонстрирующий все ключевые варианты sleep:
Запуск:
После запуска терминал молчит на 2 секунды, затем выводит «Step 2», ещё мгновение — «Step 3», затем долгая пауза 70 секунд и «Done».
Советы
Если скрипт завис на
sleep, нажмите Ctrl+C — это прерывает весь скрипт. Чтобы прервать
только sleep и продолжить выполнение, используйте sleep 60 & (в фоне) и wait.
В цикле
while true; do echo "check" && sleep 1; done пауза обязательна —
без неё цикл загружает CPU на 100%. Даже sleep 0.1 резко снижает нагрузку.
На Windows (CMD/PowerShell)
sleep — другая команда: только секунды, суффиксы не работают.
В Git Bash и WSL поведение аналогично Linux. В bash-скриптах для Linux это не проблема.