sleep は指定した時間だけ処理を停止(待機)します。整数秒だけでなく、GNU環境では分・時・日などの単位や小数秒も指定できます。
実務では、リトライ間隔の待機、ジョブ間のクールダウン、バックオフ制御などに使います。
構文(Syntax)
# POSIX(整数秒)
sleep SECONDS
# GNU coreutils(拡張)
sleep NUMBER[SUFFIX]...
# SUFFIX: s(秒), m(分), h(時), d(日)
# 複数引数で合算指定が可能(例: 1m 30s)
主なオプション一覧
sleepは基本的にオプションをほとんど持ちません(GNUは--help,--versionのみ)。
ここでは実用上よく使う指定方法も併せて掲載します。
| オプション | 説明 | 使用例 |
|---|---|---|
| (なし) | 秒数で待機(POSIX互換) | sleep 5 |
| 時間サフィックス | 単位付きで待機(GNU拡張) | sleep 2m / sleep 1h / sleep 1d |
| 小数秒 | ミリ秒レベルの待機(GNU拡張) | sleep 0.2 |
| 複数指定 | 引数を合算して待機(GNU拡張) | sleep 1m 30s |
--help | 使い方を表示 | sleep --help |
--version | バージョンを表示 | sleep --version |
実行例
指定秒数だけ待つ(基本)
説明:最も基本的な使い方。ここでは 2 秒だけ停止します。
コマンド
sleep 2
出力例:なし(2秒後に次の処理へ進む)
単位を使って待つ(GNU拡張)
説明:1分30秒のように、人間に読みやすい形で指定できます。
コマンド
sleep 1m 30s
出力例:なし(合計90秒待機)
小数秒で短い待機(GNU拡張)
説明:APIリクエスト間のクールダウンなど、細かい間隔で待機します。
コマンド
sleep 0.1
出力例:なし(0.1秒待機)
リトライ処理の間隔に使う
説明:簡易リトライ。失敗したら1秒待って最大3回トライします。
コマンド
for i in 1 2 3; do
echo "try $i"
some_command && break
sleep 1
done
出力例(例)
try 1
try 2
try 3
エラー例:不正な時間指定
説明:読み取れない文字列を与えるとエラー終了します(GNUの例)。
コマンド
sleep xyz
echo $?
出力例(例)
sleep: invalid time interval 'xyz'
Try 'sleep --help' for more information.
1
実践パターン集
while ループで定期的に処理を繰り返す
#!/bin/bash
# 5秒ごとにサービスの状態を確認する
while true; do
systemctl is-active --quiet nginx && echo "nginx: running" || echo "nginx: stopped"
sleep 5
done
監視スクリプトの定番パターンです。Ctrl+C で停止するまで繰り返し実行します。
指定回数だけ繰り返す(for + sleep)
#!/bin/bash
# 10回、3秒間隔でAPIを呼ぶ
for i in $(seq 1 10); do
echo "[$i] $(date +%H:%M:%S) calling API..."
curl -s https://example.com/api/check
sleep 3
done
バックグラウンドジョブを一定時間後に停止する
#!/bin/bash
# 処理を開始してから60秒後に停止
some_long_process &
PID=$!
sleep 60
kill $PID
echo "処理を停止しました(PID: $PID)"
ミリ秒(0.1秒単位)で待機する(GNU拡張)
# 100ミリ秒待機
sleep 0.1
# 500ミリ秒(0.5秒)待機
sleep 0.5
GNU coreutils の sleep は小数秒に対応しています。macOS のデフォルト sleep は整数秒のみのため、小数を使う場合は brew install coreutils が必要です。
エクスポネンシャルバックオフ(指数関数的待機)
#!/bin/bash
# 失敗するたびに待機時間を倍にして再試行
MAX_RETRIES=5
WAIT=1
for i in $(seq 1 $MAX_RETRIES); do
some_command && break
echo "失敗 ($i/$MAX_RETRIES)。${WAIT}秒後にリトライ..."
sleep $WAIT
WAIT=$((WAIT * 2))
done
APIのレートリミット回避や不安定なネットワーク環境でのリトライに使われるパターンです。
まとめ
- 基本:
sleep 秒数で指定秒だけ待機(POSIX 互換) - 単位指定:
sleep 2m(分)、sleep 1h(時)など GNU 拡張で読みやすく書ける - ミリ秒:
sleep 0.1などの小数指定は GNU 環境で利用可能(macOS は注意) - 実践:
while true; do ...; sleep N; doneが監視ループの定番パターン - リトライ:指数関数的バックオフと組み合わせると堅牢な再試行処理を実装できる
関連コマンド
timeout:指定時間でコマンドを強制終了したいときに使うラッパー。wait:バックグラウンドジョブの終了を待つ。sleepと組み合わせて制御可能。read -t:タイムアウト付きの入力待ちで処理を一時停止。date:時刻取得・計算の補助に。at/cron/systemd timers:指定時刻・周期での実行スケジューリング。
備考
- 環境差:POSIXの
sleepは整数秒のみ。GNU coreutils はs/m/h/dの単位や小数、複数引数の合算をサポート。BusyBox でも多くの環境で小数が利用可能ですが、最小仕様は整数秒です。 - シグナル:
Ctrl+C(SIGINT)などのシグナルで待機は中断され、非ゼロで終了することがあります。必要に応じてtrapでハンドリングしてください。 - 権限:一般ユーザーで利用可。
sudoは不要です。 - 精度:実際の待機時間はスケジューラ等の影響を受け、指定よりわずかに長くなることがあります。
- 設定ファイル:関連する設定ファイルはありません(純粋なユーティリティ)。
参考
- POSIX
sleep仕様(The Open Group)
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/sleep.html - GNU coreutils:
sleepの解説
https://www.gnu.org/software/coreutils/manual/html_node/sleep-invocation.html sleep(1)マンページ(Linux)
https://man7.org/linux/man-pages/man1/sleep.1.html

コメント