Linux
 Computer >> コンピューター >  >> システム >> Linux

LinuxのsleepコマンドでBashスクリプトを一時停止する方法

押さえておきたいポイント

  • sleepコマンドに時間を指定して使用します。s=秒、m=分、h=時間、d=日(例:sleep 5sでスクリプトが5秒間一時停止します)。
  • 詳細はman sleepを参照してください。

この記事では、Linuxのsleepコマンドを使ってBashスクリプトを一時停止する方法を解説します。sleepコマンド単体ではあまり役に立ちませんが、スクリプトの一部として使えばさまざまな用途に活用できます。たとえば、最初に失敗したコマンドを再試行する前に、スクリプトを一時停止させるといった使い方が可能です。

LinuxのsleepコマンドでBashスクリプトを一時停止する方法

sleepコマンドの活用例

別のサーバーからダウンロードしたファイルを処理するスクリプトがあるとします。このスクリプトは、すべてのファイルのダウンロードが完了するまでコピー処理を開始してはいけません。ダウンロード処理は、自分のスクリプトの前に実行される別のスクリプトが担当しています。

ファイルをコピーするスクリプトには、すべてのファイルがダウンロード済みかどうかを確認するループが含まれているかもしれません(コピー処理を開始する前に50個のファイルが見つかるかどうかをチェックする、といった具合です)。

スクリプトが絶えずテストを繰り返すのは、プロセッサ時間を浪費するだけなので無意味です。代わりに、各テストの間に数分間一時停止してから再試行する方法が考えられます。こうした場面でsleepコマンドは最適です。

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

Linuxのsleepコマンドを使うには、ターミナルウィンドウに以下を入力します。

sleep 5s

上記のコマンドを実行すると、ターミナルは5秒間一時停止した後、コマンドラインに戻ります。

sleepコマンドは、キーワードsleepに続けて、一時停止したい時間の数値と単位を指定します。

遅延時間は秒、分、時間、日のいずれかで指定できます。

  • s:秒
  • m:分
  • h:時間
  • d:日

スクリプトを日単位で一時停止したい場合は、スクリプトを何日もバックグラウンドで実行し続けるのではなく、cronジョブを使って定期的にスクリプトを実行するのがおすすめです。

補足:cronジョブとは、指定した時刻や曜日に実行するようスケジュールできるLinuxコマンドやスクリプトのことです。長期間にわたって繰り返し実行するタスクに便利です。

sleepコマンドの間隔の数値は整数である必要はなく、小数も使用できます。

たとえば、次の構文では秒の小数部分を含めて指定しています。

sleep 3.5s
LinuxのsleepコマンドでBashスクリプトを一時停止する方法

実践例:カウントダウンタイマーを作成する

次のスクリプトは、sleepコマンドを使ってターミナルベースのカウントダウン時計を作る方法を示しています。

#!/bin/bash
x=10
while [ $x -gt 0 ]
do
sleep 1s
clear
echo "$x seconds until blast off"
x=$(( $x - 1 ))
done

このスクリプトの動作は以下のとおりです。

  • スクリプトは変数xに10を設定します。
  • whileループは、xの値が0より大きい間、繰り返し実行されます。
  • sleepコマンドは、ループが1周するごとにスクリプトを1秒間一時停止します。
  • スクリプトの残りの部分では、毎回画面をクリアし、「x seconds until blast off」というメッセージを表示して、xの値から1を引きます。
LinuxのsleepコマンドでBashスクリプトを一時停止する方法

sleepコマンドがないと、スクリプトは一瞬で駆け抜けてしまい、メッセージが速すぎて読めません。

sleepコマンドのオプション

sleepコマンドには、ごくわずかなオプション(スイッチ)しか用意されていません。

--helpオプションを付けると、sleepコマンドのヘルプファイルが表示されます。次のようにmanコマンドを使っても同じことができます。

man sleep

--versionオプションは、システムにインストールされているsleepコマンドのバージョンを表示します。

--versionオプションで返される情報は以下のとおりです。

  • バージョン番号
  • 著作権情報
  • ライセンス
  • 作者

ターミナルコマンドの間に待機時間を挟む

sleepコマンドのもうひとつの便利な使い方は、ターミナルウィンドウで入力するコマンドの間に一時停止を挟むことです。

2つのコマンドを続けて実行したい場合、1つ目のコマンドが終わるのを待ってから2つ目を入力することもできます。

しかし、より効率的な方法は、2つのコマンドを1行に入力し、コマンドの間にsleepコマンドを挟むことです。

$ cd /mydirectory/ && sleep 3 && ls

このコマンドの動作は以下のとおりです。

  • cd /mydirectory/コマンドがディレクトリを移動します。
  • sleep 3コマンドが、cdコマンドの完了を待つために3秒間待機します。
  • lsコマンドが実行され、ディレクトリの内容を表示します。

このような簡単な例では、sleepコマンドで節約できる時間はわずかです。しかし、長いコマンドのリストがある場合、コマンドを1行に入力できると作業時間を大幅に短縮できます。

  1. Linuxのssコマンドでネットワーク接続を監視する方法【基本から実践テクニックまで】

    Linuxを使っていると、ネットワークの状態をもっと詳しく知りたい場面に必ず出会います。そうしたニーズに応えられるツールは数多く存在しますが、中には扱いが複雑なものもあります。ssコマンドは多くのLinuxマシンに標準でインストールされているため、その使い方を知っておくと非常に便利です。ssコマンドとは?2文字だけのコマンド名は一見謎めいて見えますが、実際はとてもシンプルです。多くのLinux/Unixコマンドと同じように、コマンド名はその機能を表す略語になっています。「ss」は「Socket Statistics(ソケット統計)」の略です。Socket Statisticsは、従来のnets

  2. Linuxのwatchコマンドの使い方と実用例をわかりやすく解説

    Linuxのwatchコマンドは、指定したコマンドを一定間隔で繰り返し実行し、その結果を画面に表示し続けるためのツールです。コマンドの出力が時間とともにどう変化するかをリアルタイムで監視したい場合に非常に便利です。この記事では、watchコマンドの基本的な使い方と、覚えておくと役立つ実用的な例を紹介します。 watchコマンドの基本構文 watchコマンドの構文は以下のとおりです。 watch オプション コマンド 各要素の意味は次のとおりです。 オプション: 後述の表から選択したオプションを指定します。watchコマンドのデフォルト動作を変更できます。 コマンド: watchが繰り返し実行