sleep
1. Что делает команда sleep в Linux?
Команда sleep заставляет процесс приостановить выполнение на заданный промежуток времени. В отличие от pause, которая ждёт клавишу, sleep принимает числовой аргумент (секунды) и может комбинироваться с другими единицами измерения:
| Единица | Синтаксис | Пример |
|---|---|---|
| секунды | s | sleep 5s |
| минуты | m | sleep 2m |
| часы | h | sleep 1h |
| дни | d | sleep 0.25d (6 ч.) |
Команда возвращает код выхода 0 при нормальном завершении и >0 в случае ошибок, например, если задан неверный формат.
2. Технические применения sleep в скриптах
2.1 Паузы между командами в автоматизации
В Bash‑скрипте можно вставлять паузы для избежания перегрузки ресурсов:
#!/bin/bash
echo "Запускаем резервное копирование..."
rsync -a /data/ backup:/remote/
sleep 30s # подождать 30 секунд перед проверкой состояния
echo "Проверяем лог:"
grep 'error' backup.logЕсли резервный сервер отвечает медленно, пауза гарантирует, что grep не выполнится до завершения записи лога.
2.2 Периодическое выполнение задач без cron
Можно использовать цикл с sleep для периодической работы:
#!/usr/bin/env bash
while true; do
/usr/local/bin/health_check.sh
sleep 5m # проверяем каждые 5 минут
done &Такой подход удобен в контейнерах Docker, где не хочется устанавливать cron‑демон.
2.3 Синхронизация параллельных процессов
В многопоточных скриптах sleep может помочь синхронизировать этапы:
#!/bin/bash
./producer &
sleep 1s # дать производителю начать работу
./consumer &
wait # ждём завершения обоих процессовЕсли без паузы потребитель запустится раньше, он не найдёт данные.
2.4 Тестирование тайм-аутов
При тестировании сетевых приложений можно эмулировать задержки:
#!/usr/bin/env bash
echo "Отправка запроса..."
curl http://example.com &
sleep 10s # имитируем медленный ответ
kill $! # прерываем запрос после тайм‑аута3. Оптимизация использования sleep
Совет 1: избегайте длинных пауз в критических секциях
Если скрипт отвечает на внешние сигналы, длительная пауза может сделать систему нечувствительной. Вместо sleep 60s используйте цикл с небольшими интервалами и проверкой условий:
for i in {1..12}; do
sleep 5s
check_condition && break
doneСовет 2: комбинируйте sleep с wait для точного контроля
Если запускаете несколько фоновых процессов, используйте wait после sleep, чтобы убедиться в их завершении:
./task1 &
pid1=$!
./task2 &
pid2=$!
sleep 3s # дать задачам старт
wait $pid1
wait $pid2
echo "Все задачи выполнены."4. Часто задаваемые вопросы
- Как использовать миллисекунды?
В Bash можно передать дробное число:sleep 0.5(полсекунды). Однако точность зависит от ядра. - Можно ли задать отрицательное время?
Нет, команда вернёт ошибку «invalid time format». - Что делать при большом значении
sleep(дни)?
Для дней используйтеsleep 86400(секунды в дне) илиsleep 1d. При больших интервалах лучше использовать системный таймер (systemd timer) вместо sleep.