sleep

1. Что делает команда sleep в Linux?

Команда sleep заставляет процесс приостановить выполнение на заданный промежуток времени. В отличие от pause, которая ждёт клавишу, sleep принимает числовой аргумент (секунды) и может комбинироваться с другими единицами измерения:

ЕдиницаСинтаксисПример
секундыssleep 5s
минутыmsleep 2m
часыhsleep 1h
дниdsleep 0.25d (6 ч.)

Команда возвращает код выхода 0 при нормальном завершении и >0 в случае ошибок, например, если задан неверный формат.

2. Технические применения sleep в скриптах

2.1 Паузы между командами в автоматизации

В Bash‑скрипте можно вставлять паузы для избежания перегрузки ресурсов:

Bash
#!/bin/bash
echo "Запускаем резервное копирование..."
rsync -a /data/ backup:/remote/
sleep 30s          # подождать 30 секунд перед проверкой состояния
echo "Проверяем лог:"
grep 'error' backup.log

Если резервный сервер отвечает медленно, пауза гарантирует, что grep не выполнится до завершения записи лога.

2.2 Периодическое выполнение задач без cron

Можно использовать цикл с sleep для периодической работы:

Bash
#!/usr/bin/env bash
while true; do
    /usr/local/bin/health_check.sh
    sleep 5m          # проверяем каждые 5 минут
done &

Такой подход удобен в контейнерах Docker, где не хочется устанавливать cron‑демон.

2.3 Синхронизация параллельных процессов

В многопоточных скриптах sleep может помочь синхронизировать этапы:

Bash
#!/bin/bash
./producer &
sleep 1s            # дать производителю начать работу
./consumer &
wait                # ждём завершения обоих процессов

Если без паузы потребитель запустится раньше, он не найдёт данные.

2.4 Тестирование тайм-аутов

При тестировании сетевых приложений можно эмулировать задержки:

Bash
#!/usr/bin/env bash
echo "Отправка запроса..."
curl http://example.com &
sleep 10s          # имитируем медленный ответ
kill $!            # прерываем запрос после тайм‑аута

3. Оптимизация использования sleep

Совет 1: избегайте длинных пауз в критических секциях

Если скрипт отвечает на внешние сигналы, длительная пауза может сделать систему нечувствительной. Вместо sleep 60s используйте цикл с небольшими интервалами и проверкой условий:

Bash
for i in {1..12}; do
    sleep 5s
    check_condition && break
done

Совет 2: комбинируйте sleep с wait для точного контроля

Если запускаете несколько фоновых процессов, используйте wait после sleep, чтобы убедиться в их завершении:

Bash
./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.