BashスクリプトをLinuxで作成する際、実行に一時停止や遅延を導入する必要がある場面が多くあります。APIリクエストを制限したり、プロセスが完了するのを待ったり、時間に基づく操作をシミュレーションしたりする場合、sleepコマンドが便利です。

この記事では、Bashでsleepを効果的に使用する方法について、実際の例、時間単位、そして高度な使用のためのヒントを探ります。

sleepコマンドとは?

sleepコマンドは、スクリプトまたはコマンドの実行を指定された時間だけ一時停止します。これは、LinuxやmacOSを含むほぼすべてのUnix系システムでデフォルトで利用可能です。

基本構文:

sleep NUMBER[SUFFIX]
  • NUMBER: 継続時間

  • SUFFIX(オプション): 時間単位 (s, m, h, d)

サフィックスが指定されていない場合、秒が仮定されます。

Bashスクリプトにおける実用的な使用例

1. コマンド間の一時停止

#!/bin/bash
echo "Starting process..."
sleep 3
echo "Process resumed after 3 seconds"

2. ループ内での実行遅延

#!/bin/bash
for i in {1..5}; do
echo "Ping $i"
sleep 1
done

3. サービスの起動を待つ

初期化に時間がかかるバックグラウンドプロセスを起動する場合:

#!/bin/bash
./start_server.sh &
sleep 10
curl http://localhost:8080/healthcheck

4. スクリプト内でのレート制限

APIと対話したり、スロットリングが必要な反復タスクを実行したりする場合:

#!/bin/bash
for url in $(cat urls.txt); do
curl -s "$url"
sleep 2 # Avoid overloading the server
done

注意: sleepを責任を持って使用する

  • sleepを過剰に使用すると、特に高性能が要求される環境では非効率的なスクリプトにつながる可能性があります。

  • イベント駆動型スクリプトの場合、任意のsleepの代わりにinotifywaitやロジックベースの条件文を検討してください。

  • 自動化やDevOpsでは、厳密に必要でない限り長いsleep時間を避け、タイムアウトロジックを使ったポーリングを好んでください。

プロのヒント

  • sleepを&と一緒に使用してバックグラウンドで実行します:

    sleep 5 & # Continue execution immediately while sleeping in background
  • 必要に応じてwaitと組み合わせます:

    sleep 5 &
    wait
    echo "Waited for sleep to finish"
  • systemdやcrontabタスクでは、絶対に必要でない限りsleepを避けてください。可能な場合はシステムレベルのタイマーを使用してください。

結論

sleepコマンドは、スクリプトのタイミングとペースを制御するためのシンプルでありながら強力なツールです。タスク間の遅延を作成したり、ループを制限したり、非同期アクションを調整したりする際に、sleepは実行フローを正確に制御します。

賢く使用し、その影響を理解することで、Linuxシステム上でより予測可能で、保守可能で、安定したスクリプトを書くことができます。