sleep コマンドの使い方|秒・分・ミリ秒・ループでの待機処理

コマンドリファレンス

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 は不要です。
  • 精度:実際の待機時間はスケジューラ等の影響を受け、指定よりわずかに長くなることがあります。
  • 設定ファイル:関連する設定ファイルはありません(純粋なユーティリティ)。

参考

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント