InfraAcademy

InfraAcademy Blog

【Linux】sleepコマンドの使い方解説!実行プロセスを一定時間停止させるためのコマンド

| #Linux #Linux初心者 #コマンド
Linuxをブラウザで試してみる

Linux・ネットワーク・AWSを、環境構築なしで実践学習できます

こんにちは、フルスタックエンジニアのryuです。

今回の記事では、Linuxのsleepコマンドについて解説します。

sleepは、指定した時間だけ処理を待機させるためのコマンドです。

一見するとかなり単純なコマンドですが、シェルスクリプトで処理の間隔を空けたり、一定時間ごとに処理を繰り返したりするときによく使います。

この記事では、基本的な使い方から秒・分・時間の指定、シェルスクリプトでの利用例、timeoutとの違いまで解説します。

【Linux】sleepコマンドの使い方解説!

sleepコマンドとは?

sleepコマンドとは、名前の通りプログラムの実行を一時停止するためのコマンドです。

sleepは、寝るという意味があり、コマンドの実行を寝かせるというイメージで覚えると分かりやすいです。

このコマンドを使用すると、指定した時間だけ次の処理へ進むのを待つことができます。

たとえば、次のコマンドを実行すると5秒間待機します。

sleep 5

5秒経過するとsleepコマンドが終了し、シェルへ操作が戻ります。

何かを5秒後に自動表示するというより、その場所で5秒待ってから次の処理へ進むという動きです。

sleepコマンドの基本的な使い方

秒数を指定する

最も基本的な書き方は次の通りです。

sleep [時間]

単位を付けずに数値だけを書いた場合は、秒として扱われます。

たとえば、3秒待機する場合は次のように実行します。

sleep 3

コマンドだけでは本当に3秒待っているのか分かりにくいため、dateコマンドと組み合わせると動きを確認できます。

date
sleep 3
date

1回目のdateで現在時刻を表示し、3秒待ったあと、もう一度時刻を表示します。

このように前後へ処理を置くと、sleepがどのように動いているのか理解しやすいです。

【関連記事】Linuxで現在時刻を確認する方法は、Linuxで時刻を確認・変更する方法を解説!date・timedatectl・NTP同期についてでも詳しく解説しています。

sleepコマンドと別のコマンドを順番に実行する

sleepは、ほかのコマンドと組み合わせて使うことが多いです。

たとえば、次の例では最初に文字列を表示し、5秒待ってから次の文字列を表示します。

echo "処理を開始します"
sleep 5
echo "5秒経過しました"

実行すると、まず次の文字が表示されます。

処理を開始します

その後5秒待機してから、次のように表示されます。

5秒経過しました

1行で書く場合は、セミコロンでつなぐこともできます。

echo "開始"; sleep 5; echo "終了"

元の記事では、パイプを利用した次のような例を紹介していました。

cat "test" | sleep 5

しかし、この書き方では5秒後にtestという文字列が表示されるわけではありません。

sleepは標準入力を受け取って後から表示するコマンドではないため、処理の実行を遅らせたい場合は、sleepの前後にコマンドを置くと覚えておきましょう。

sleepコマンドで時間の単位を指定する

sleepコマンドでは、数値の後ろに単位を付けることもできます。

GNU/Linuxでよく使われるsleepでは、次のような単位があります。

単位 意味 使用例
s sleep 5s
m sleep 2m
h 時間 sleep 1h
d sleep 1d

たとえば、5秒待機する場合は次のように実行できます。

sleep 5s

2分待機する場合は次の通りです。

sleep 2m

1時間待機したい場合は、次のように書けます。

sleep 1h

単位を付けなくても秒として動作しますが、シェルスクリプトでは5s2mのように書くと、あとから見たときに何の時間なのか分かりやすくなります。

小数を指定して1秒未満待機する

sleepでは、小数を利用して短い時間を指定できる環境もあります。

たとえば、0.5秒待機する場合は次のように実行します。

sleep 0.5

0.1秒であれば次の通りです。

sleep 0.1

1ミリ秒相当であれば、秒へ変換して次のように指定できます。

sleep 0.001

msという単位を直接書くのではなく、秒を小数で指定するイメージです。

ただし、非常に短い時間を指定した場合、OSのスケジューリングなどの影響もあるため、必ず指定した時間ぴったりに処理が再開されるとは限りません。

シェルスクリプトでsleepを使う

処理の途中で待機する

sleepコマンドは、シェルスクリプトの中でよく使われます。

たとえば、次のスクリプトでは処理を開始してから5秒待ち、その後に完了メッセージを表示します。

#!/bin/bash

echo "処理を開始します"

# ここに実際の処理を書く

sleep 5

echo "次の処理へ進みます"

外部サービスへアクセスしたあとに少し待機したい場合や、一定時間ごとに状態を確認したい場合などに利用できます。

ただし、何となくsleep 10を入れて問題を回避するのではなく、本当に固定時間の待機が必要なのかを考えることも大切です。

whileと組み合わせて繰り返す

sleepwhileと組み合わせて、一定時間ごとに処理を繰り返すこともできます。

#!/bin/bash

while true; do
    date
    sleep 10
done

このスクリプトでは、現在時刻を表示し、10秒待機してから再び時刻を表示します。

そのままでは繰り返し続けるため、停止するときはCtrl+Cを押します。

実際の監視処理であれば、次のようにコマンドを置くこともできます。

#!/bin/bash

while true; do
    curl -I https://example.com
    sleep 60
done

1分ごとにWebサイトへリクエストを送る例です。

実運用では専用の監視ツールやcron、systemd timerなどを利用することも多いですが、sleepの仕組みを理解する例として分かりやすいです。

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

sleepを実行すると、通常は指定時間が終わるまでターミナルから次のコマンドを入力できません。

sleep 30

30秒待たずに別の操作をしたい場合は、末尾に&を付けてバックグラウンドで実行できます。

sleep 30 &

実行すると、シェルへすぐに操作が戻ります。

バックグラウンドジョブはjobsコマンドで確認できます。

jobs

sleepは、Linuxのプロセスやジョブ制御を学習するときの簡単な練習にも使えます。

たとえば、長めのsleepをバックグラウンドで実行してからpsで確認してみましょう。

sleep 300 &
ps aux | grep sleep

実際にプロセスとしてsleepが動いていることを確認できます。

実行中のsleepを停止する

フォアグラウンドで長いsleepを実行してしまった場合は、完了まで待つ必要はありません。

たとえば次のコマンドを実行したとします。

sleep 1h

1時間待つ必要がない場合は、Ctrl+Cで停止できます。

Linuxでは、ターミナルで実行中のプロセスに対してCtrl+Cを押すと、通常は割り込みのシグナルが送られます。

sleepもそこで終了し、シェルへ操作が戻ります。

このようにsleepを使うだけでも、フォアグラウンド、バックグラウンド、プロセス、シグナルといったLinuxの基本につながります。

sleepとtimeoutの違い

sleepと似た場面で登場するコマンドにtimeoutがあります。

名前が似ていますが、目的は異なります。

コマンド 目的
sleep 指定時間だけ待機する
timeout コマンドの実行時間に上限を設ける

たとえば、5秒待つだけなら次のコマンドです。

sleep 5

一方、あるコマンドが10秒以上実行されたら終了させたい場合は、次のようにtimeoutを利用できます。

timeout 10s ping 8.8.8.8

sleepは処理を待たせる、timeoutは処理が長くなりすぎないよう制限する、と区別すると分かりやすいです。

sleepとcronの違い

定期実行という意味では、cronとの違いも覚えておくと良いです。

sleepをwhileループと組み合わせても定期的な処理は作れますが、シェルを起動し続ける必要があります。

毎日決まった時間にバックアップする、5分ごとにバッチ処理を実行するといった用途では、cronを使う方が適している場合があります。

crontabについては、【関連記事】crontabの設定方法を解説!定期的にジョブを実行させる方法とは?でも詳しく解説しています。

sleepとcronを簡単に分けると、次のようになります。

sleep
→ 今動いている処理の途中で一定時間待つ

cron
→ 指定した時刻や周期で新しい処理を実行する

この違いを理解しておくと、シェルスクリプトを書くときにも使い分けやすくなります。

sleepコマンドを実際に練習してみる

sleepは難しいコマンドではありませんが、シェルスクリプトやプロセスを理解する入り口として使いやすいコマンドです。

まずはターミナルで次のコマンドを試してみてください。

echo "start"
sleep 3
echo "end"

次にバックグラウンドでも動かしてみます。

sleep 60 &
jobs

その後、psでプロセスを確認します。

ps aux | grep sleep

コマンドを読むだけではなく、実際に動かすことで、sleepが単に時間を止めるものではなく、Linux上で動作する一つのプロセスだと分かります。

【関連記事】シェルやbashの違いから学びたい方は、shとは?/bin/sh・シェルスクリプト・bashとの違いを初心者向けに解説も参考にしてください。

InfraAcademyでLinuxコマンドを実際に学習する

さらにLinuxのコマンドの学習をしたい人に向けて、InfraAcademyというインフラ学習サービスのご紹介です。

Linuxの実践的な内容を学習したい、コマンドを打ちながらLinuxを学習したい。

そのような方に向けて、InfraAcademyではLinuxの教材とブラウザ上の実行環境を組み合わせて学習できるようにしています。

Linuxを基礎から学習したい方は、Linux入門講座をご覧ください。

Linuxサーバーと一緒に必要になるIPアドレスやルーティングは、ネットワーク講座で学習できます。

クラウド上でLinuxを扱ってみたい方は、AWS講座も用意しています。

InfraAcademyでLinuxの学習を始める

sleepコマンドのまとめ

今回の記事では、Linuxのsleepコマンドについて解説しました。

基本的な使い方はとてもシンプルです。

sleep 5

これで5秒間待機します。

分や時間を指定する場合は、次のように単位を付けられます。

sleep 2m
sleep 1h

シェルスクリプトの途中で待機したり、whileと組み合わせて一定間隔で処理したり、バックグラウンドでプロセスを動かしたりすることもできます。

sleepそのものは簡単ですが、シェルスクリプト、プロセス、ジョブ制御などにもつながるコマンドです。

まずはechodateと組み合わせて実際に動かし、どのタイミングで処理が止まり、いつ再開するのか確認してみてください。

Next Action

記事で読んだ内容を、講座で実装してみましょう

InfraAcademyでは、ブラウザ上でLinuxやネットワークの実践環境を使いながら学習できます。無料で始められる講座から、学習の流れを試せます。

この記事を書いた人

ryu

InfraAcademy運営 / エンジニア

エンジニア歴10年。Linux、ネットワーク、クラウドを中心に、実務で役立つインフラ技術を初心者にもわかりやすく解説しています。

X: @ryu63614894

Related

関連記事

ブログ一覧へ

Roadmap

まずはこの4講座から

ログインすれば無料で始められる講座です。気になったテーマから手を動かして学べます。

講座一覧を見る