web-dev-qa-db-ja.com

プログラム(bashスクリプト)を特定の時間一時停止します

特定のbashスクリプトを30分間一時停止したいと思います。現在、私はsleep 1800を使用していますが、ラップトップがサスペンド(スリープ)状態にある可能性がある時間を考慮していません。これを達成する方法はありますか?

今のところ午後12時53分なら、午前1時23分にプログラムを再開したいと思います。ただし、その間、コンピューターはスリープ状態になる可能性があります。コンピューターが午前1時23分より遅くまでスリープしている場合は、スリープから再開した直後にプログラムを再開したいと思います。

1
hovnatan

たぶんそれを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_は、スクリプトに毎秒条件をチェックさせます。

2
Max1