特定のbashスクリプトを30分間一時停止したいと思います。現在、私はsleep 1800
を使用していますが、ラップトップがサスペンド(スリープ)状態にある可能性がある時間を考慮していません。これを達成する方法はありますか?
今のところ午後12時53分なら、午前1時23分にプログラムを再開したいと思います。ただし、その間、コンピューターはスリープ状態になる可能性があります。コンピューターが午前1時23分より遅くまでスリープしている場合は、スリープから再開した直後にプログラムを再開したいと思います。
たぶんそれをwhile
ループでラップし、スケジュールされた時間にあなたがいるかどうかをテストします。
_#!/bin/bash
SOON=$(($(date +%s) + 1800))
while [[ "$NOW" -le "$SOON" ]]; do
sleep 1
NOW=$(date +%s)
done
_
日付のアイデアは chepnerによるこの回答 にもあります。 _+%s
_は、1970年以降の日付をdate
形式で秒単位にします。 $(( ))
は秒数を算術的に加算するだけです。 1800を任意の量に置き換えます(おそらく、少量でテストして、それが機能するかどうかを確認するのが最善です)。 _sleep 1
_は、スクリプトに毎秒条件をチェックさせます。