【Linux】sleepコマンドの使い方|秒・分・時間の指定方法を解説

【Linux】sleepコマンドの使い方|秒・分・時間の指定方法を解説

PR Amazonのアソシエイトとして、ITナレッジライフは適格販売により収入を得ています。

記事の文字数:2,863

Linuxのsleepコマンドの使い方を初心者向けに解説します。秒・分・時間・日の単位指定、小数点での細かい指定、シェルスクリプトでのループ処理やリトライ処理への活用例まで、実務で役立つ使い方を豊富なサンプル付きで紹介します。

Linuxユーザにお勧めの本 ↗

最新版

ゼロからはじめるLinuxサーバー構築・運用ガイド 第2版 動かしながら学ぶWebサーバーの作り方

難易度
実用性
最新度

Rocky Linux対応。実際にWebサーバーを公開するまでのプロセスを体験できる、最も確実で実践的なガイドブックです。

初心者向け

わかばちゃんと学ぶ サーバー監視

難易度
実用性
読みやすさ

マンガと図解が中心で圧倒的に読みやすい。負荷調査の手法がスッと理解できるようになります。

新しいLinuxの教科書 第2版

難易度
実用性
読みやすさ

一生モノの基礎知識が身につく定番書です。

ゼロからわかる Linuxコマンド200本ノック―基礎知識と頻出コマンドを無理なく記憶に焼きつけよう!

難易度
実用性
習得度

アウトプット重視で記憶に定着しやすい。反復練習でLinux操作が自由自在になります。

エンジニア1年生のための世界一わかりやすいLinuxコマンドの教科書

難易度
実用性
読みやすさ

LinuxLinux [リナックス / ライナックス]オープンソースのOSカーネルsleepコマンドは、指定した時間だけ処理を一時停止(待機)させるコマンドです。
シェルスクリプトで処理の間隔を空けたい場合や、一定時間後にコマンドを実行したい場合に使用します。

本記事ではsleepコマンドの基本的な使い方から、シェルスクリプトでの実践的な活用例まで解説します。

sleepコマンドの基本構文と時間単位

構文は以下の通りです。

構文
sleep 数値[単位]

数値に待機したい時間を指定します。単位を省略した場合は「秒」として扱われます

sleepで使える時間単位(秒・分・時間・日)

数値の後に以下の単位を付けることで、秒以外の時間を指定できます。

単位意味
s秒(seconds)sleep 5s(5秒待機)
m分(minutes)sleep 2m(2分待機)
h時間(hours)sleep 1h(1時間待機)
d日(days)sleep 1d(1日待機)

※単位の指定はGNU coreutilsのsleepコマンドで利用できます。一般的なLinuxディストリビューション(UbuntuUbuntu [ウブントゥ]人気のLinuxディストリビューションCentOSCentOS [セントオーエス]Red Hat Enterprise Linux互換の安定したLinuxディストリビューションDebianDebian [デビアン]コミュニティ主導で開発される安定性の高いLinuxディストリビューションなど)ではデフォルトで使用可能です。
ただし、macOSmacOS [マックオーエス]Appleが開発するMac用のオペレーティングシステムに標準搭載されているBSD版のsleepでは、GNU版のようなmhdなどの時間単位や小数による指定には対応していません(整数秒のみ)。macOSで分・時間単位や小数秒の指定を使いたい場合は、brew install coreutilsでGNU版をインストールし、gsleepコマンドを利用してください。

sleepコマンドの使い方【単位別】

sleepで秒単位の待機をする

最もよく使う基本的な使い方です。以下は5秒間待機する例です。

実行コマンド
sleep 5

単位sを明示しても同じ意味になります。

実行コマンド
sleep 5s

sleepで分単位の待機をする

2分間待機する場合は以下のように指定します。

実行コマンド
sleep 2m

sleepで時間(hours)単位の待機をする

1時間待機する場合は以下のように指定します。

実行コマンド
sleep 1h

sleepで日(days)単位の待機をする

1日待機する場合は以下のように指定します。

実行コマンド
sleep 1d

sleepで小数秒の待機をする

GNU coreutilsのsleepコマンドでは小数を指定することで、1秒未満の待機も可能です。

実行コマンド
sleep 0.5

上記は0.5秒(500ミリ秒)待機します。

実行コマンド
sleep 1.5

上記は1.5秒待機します。

sleepコマンドにはms(ミリ秒)のサフィックスは存在しません。ミリ秒単位の待機を行いたい場合は、sleep 0.5sleep 0.001のように小数で秒数を指定してください。
また、前述のとおりmacOSのBSD版sleepでは小数の指定にも対応していないため、注意が必要です。

sleepで複数の時間を組み合わせて指定する

GNU coreutilsのsleepでは、複数の引数を指定すると合計の時間だけ待機します。

実行コマンド
sleep 1m 30s

上記は1分30秒(合計90秒)待機します。

シェルスクリプトでのsleepの活用例

sleepコマンドはシェルスクリプト内で処理を制御する際に活用されます。
ここでは実務でよく使われるパターンを紹介します。

sleepで処理の間隔を空ける

処理と処理の間に一時停止を入れたい場合に使用します。

interval.sh
#!/bin/bash
echo "処理1を実行します..."
# 処理1
sleep 3
echo "3秒後に処理2を実行します..."
# 処理2

実行結果

実行結果
$ bash interval.sh
処理1を実行します...
(3秒待機)
3秒後に処理2を実行します...

sleepとwhileループで一定間隔の繰り返し実行をする

whileループと組み合わせることで、一定間隔でコマンドを繰り返し実行できます。

monitor.sh
#!/bin/bash
while true; do
echo "$(date '+%Y-%m-%d %H:%M:%S') - 監視中..."
sleep 60
done

上記のスクリプトは、前回の処理が終わった後に60秒待機し、再び処理を実行します。
サーバーの死活監視やログ監視などで活用できます。

停止するにはCtrl + Cを押します。

sleepでリトライ処理を実装する

外部APIAPI [エーピーアイ]Application Programming Interface。異なるソフトウェア間の接続口やサービスへの接続が失敗した場合に、一定間隔でリトライする処理を実装できます。

retry.sh
#!/bin/bash
MAX_RETRY=5
RETRY_INTERVAL=10
count=0
while [ $count -lt $MAX_RETRY ]; do
echo "接続を試みます...(${count}回目)"
# 接続処理(例:curlでヘルスチェック)
# -f オプション:HTTPエラー時にcurl自体が失敗(終了コード非0)を返す
# -s オプション:進捗表示を非表示にする
# -o /dev/null:レスポンス本文を破棄する
if curl -f -s -o /dev/null http://example.com; then
echo "HTTPリクエストに成功しました。"
exit 0
fi
count=$((count + 1))
echo "接続に失敗しました。${RETRY_INTERVAL}秒後にリトライします..."
sleep $RETRY_INTERVAL
done
echo "最大リトライ回数(${MAX_RETRY}回)に達しました。"
exit 1

上記のスクリプトは、最大5回まで10秒間隔でリトライを行います。
curl-fオプションを使うことで、HTTPHTTP [エイチティーティーピー]HyperText Transfer Protocol。Webでのデータ転送プロトコルステータスが400以上の場合にcurlコマンド自体が失敗を返すため、if文で直接成功・失敗を判定できます。

sleepでカウントダウンタイマーを作る

sleepを利用したカウントダウンタイマーも作成できます。

countdown.sh
#!/bin/bash
echo "10秒後に処理を開始します..."
for i in $(seq 10 -1 1); do
echo "${i}..."
sleep 1
done
echo "処理を開始します!"

実行結果

実行結果
$ bash countdown.sh
10秒後に処理を開始します...
10...
9...
8...
(省略)
1...
処理を開始します!

sleepをバックグラウンドで実行する方法

コマンドの末尾に&を付けると、sleepをバックグラウンドで実行できます。
待機中に別の作業を行いたい場合に便利です。

実行コマンド
sleep 30 &
echo "sleepをバックグラウンドで実行中..."

バックグラウンドで実行したプロセスを確認するにはjobsコマンドを使用します。

実行コマンド
jobs
実行結果
[1]+ Running sleep 30 &

sleepコマンドを途中で中断・キャンセルする方法

フォアグラウンドのsleepを中断する

フォアグラウンドで実行中のsleepを中断するには、Ctrl + Cを押します。

バックグラウンドのsleepを中断する

バックグラウンドで実行中のsleepを中断するには、killコマンドを使用します。

実行コマンド
sleep 300 &
kill %1

%1はジョブ番号です。jobsコマンドで確認できます。

sleepコマンドを使う際の注意点

sleepの過度な使用を避ける

自動化スクリプトで理由なく長いsleepを入れると、処理効率が低下します。
ファイルの変更を監視したい場合はinotifywaitコマンドなど、目的に適した専用ツールの利用を検討しましょう。

sleepの待機時間の精度について

sleepでは小数秒を指定できますが、指定した時間ぴったりに処理が再開されることが保証されるわけではありません。
待機時間がずれる主な原因は以下の2つです。

  • OSOS [オーエス]Operating System。基本ソフトウェアのタイマー周期(tick)による丸め:Linuxカーネルは周期的なタイマー割り込み(一般に数ms単位)でスレッドを起床させるため、それ以下の微小な時間を指定しても実際の起床タイミングは丸められます
  • 外部コマンド起動のオーバーヘッド:シェルスクリプトからsleepを呼び出す際、新しいプロセスを生成(fork)するまでに数ms〜数十msの時間がかかります。実際の停止時間は「プロセスの起動時間+指定した時間」となるため、ミリ秒単位の短い制御ではこのオーバーヘッド自体が無視できない遅延になります

厳密なタイミング制御が必要な場合は、用途に応じてプログラミング言語のタイマー機能や、シェルの組み込みコマンドであるread -tのタイムアウト機能などの利用を検討してください。

sleepはシグナルによって中断されることがある

sleepコマンドはSIGTERMSIGINTなどのシグナルによって待機を中断されることがあります。
たとえば、Ctrl + Cを押すとSIGINTが送信され、sleepの待機が中断されます。
スクリプト内でtrapを使うことで、シグナル受信時の動作をカスタマイズできます。

trap使用例
#!/bin/bash
trap "echo '中断されました'; exit 1" SIGINT SIGTERM
echo "60秒間待機します(Ctrl+Cで中断可能)"
sleep 60
echo "待機完了"

まとめ

sleepコマンドはLinuxで処理を一時停止させるためのシンプルなコマンドです。
基本的な使い方をまとめると以下の通りです。

用途コマンド例
5秒待機sleep 5
2分待機sleep 2m
1時間待機sleep 1h
0.5秒待機sleep 0.5
1分30秒待機sleep 1m 30s

シェルスクリプトでの処理間隔の調整やリトライ処理、定期的な監視処理など、実務で幅広く活用できます。
用途に合わせてsleepコマンドを使いこなしましょう。


以上で本記事の解説を終わります。
よいITライフを!
ITナレッジライフ 運営者
この記事を書いた人

Z (ITナレッジライフ)

現役のITエンジニア。Linux、プログラミング、IT用語など、日々の業務で得た「痒いところに手が届く」技術情報を発信しています。

プロフィールと編集ポリシーを見る

Linuxユーザにお勧めの本 ↗

最新版

ゼロからはじめるLinuxサーバー構築・運用ガイド 第2版 動かしながら学ぶWebサーバーの作り方

難易度
実用性
最新度

Rocky Linux対応。実際にWebサーバーを公開するまでのプロセスを体験できる、最も確実で実践的なガイドブックです。

人気記事


記事を評価

Thanks!
目次
Scroll to Top