特定のbashスクリプトを30分間一時停止したいと思います。これで使用しますsleep 1800
が、ラップトップが一時停止(スリープ)状態にある可能性がある時間を考慮しません。これを達成する方法はありますか?
今が午後12時53分なら午前1時23分にプログラムを再開したいと思います。ただし、同時にコンピュータがスリープモードになることもあります。コンピュータが午前1時23分以降まで休止状態になっている場合は、休止状態から再起動してすぐにプログラムを再起動したいと思います。
答え1
たぶんループに巻き込まれ、スケジュールされた時間while
にあるかどうかをテストすることもできます。
#!/bin/bash
SOON=$(($(date +%s) + 1800))
while [[ "$NOW" -le "$SOON" ]]; do
sleep 1
NOW=$(date +%s)
done
日付のアイデアは以下でも見つけることができます。Chepnerの答え。このコマンドは、1970年以降の日付を秒単位で+%s
フォーマットしますdate
。$(( ))
超演算を追加するだけです。 1800を任意の数字に置き換えます。 (動作していることを確認するために少量でテストするのが最善です。)sleep 1
スクリプトに毎秒条件を確認させます。