本記事では、bashでのsleepの使い方を解説します。
sleepとは
sleepはbashシェルに組み込まれたコマンドで、指定した時間だけプログラムの実行を一時停止させることができます。スクリプトの処理を遅らせたい場合やコマンドの実行間隔を制御したい場合に非常に便利です。システムリソースへの負荷を分散させたり、タイミングを調整したりする場合によく使用されます。
構文
sleepコマンドの基本的な構文は非常にシンプルです。
sleep 数値[単位]
ここで「数値」は待機したい時間の長さ、「単位」はその時間の単位(秒、分、時間、日)を表します。単位を省略した場合は、デフォルトで秒単位として扱われます。
様々な単位の時間指定
sleepコマンドでは、様々な時間単位を指定できます。以下の表で各単位とその使用例をまとめました。
単位 | 説明 | 表記 | 例 |
---|---|---|---|
秒 | デフォルトの単位 | s(省略可能) | sleep 5 または sleep 5s |
分 | 分単位で指定 | m | sleep 2m |
時間 | 時間単位で指定 | h | sleep 1h |
日 | 日単位で指定 | d | sleep 1d |
複合的な時間指定も可能です。例えば、異なる単位を組み合わせて使用できます。
sleep 1h 30m 10s # 1時間30分10秒待機
注意点
- sleepコマンドの実行中はスクリプトが一時停止しますので、リソースを長時間ブロックする可能性があることに注意してください。
- 非常に長い待機時間を設定する場合は、システムのリブートやプロセスの中断によって処理が完了しない可能性があります。
- 小数点を使用した時間指定も可能です(例:sleep 0.5)が、すべてのシステムで小数点の精度が保証されるわけではありません。
- 複合的な時間指定を使用する際は、より大きな単位から順に指定するのが一般的です(例:sleep 1h 30m)。
- スクリプトの中断(Ctrl+C)を考慮した設計をすることで、長時間のsleepが必要な場合でも安全に処理することができます。
応用例
1. コマンドの実行間隔を空ける
for i in {1..5}; do
echo "処理 $i を実行中..."
sleep 2 # 2秒待機
done
2. バックグラウンドプロセスの終了を待つ
./長時間実行プロセス &
PID=$!
echo "プロセスがバックグラウンドで実行中..."
sleep 10m # 10分待機
kill $PID # 10分後にプロセスを終了
3. サーバー起動後に接続を試みる
echo "サーバーを起動しています..."
start-server &
sleep 5 # サーバーの起動を5秒待つ
echo "サーバーに接続を試みます..."
connect-to-server
まとめ
sleepコマンドは非常にシンプルですが、バッチ処理やスクリプト実行のタイミング制御に役立つ強力なツールです。秒、分、時間、日などの様々な時間単位を使用して待機時間を柔軟に指定できます。タスク間の遅延を追加したり、処理の実行タイミングを調整したりするのに最適です。適切に使用することで、より効率的で安定したシェルスクリプトを作成することができます。