次回特定の時間まで睡眠

次回特定の時間まで睡眠

一連のコマンドや「4:00」などの特定の時間が表示されるまで、スリープ状態の単一のコマンドが必要です。

どうすればいいですか?

現在使用中のスクリプトを終了できないため、commandatまたはcronjobはオプションではありません。

私が言う具体的なケースは、画面上で実行されるスクリプトです。スクリプトのある時点では、保存する必要がある重要な変数が多いため、スクリプト自体を介してスクリプトの実行を中断しないことが非常に重要です。このスクリプトは常に定期的に実行されるわけではありません。特定の時間だけ実行してください。

スクリプトがファイルを生成したり、cronjobや他の画面などの他のタスクを生成する必要がある場合は、非常に便利です。これは単なるデザイン問題です。

ちょうど良い考えが思い浮かんだ。

difference=$(($(date -d "4:00" +%s) - $(date +%s)))

if [ $difference -lt 0 ]
then
    sleep $((86400 + difference))
else
    sleep $difference
fi

より良い考えがありますか?

必要に応じてより多くの情報が追加される予定です!

ベストアンサー1

Teddenの提案はうまくいきますが、私の考えでは私の提案はより効果的だと思います。

difference=$(($(date -d "4:00" +%s) - $(date +%s)))

if [ $difference -lt 0 ]
then
    sleep $((86400 + difference))
else
    sleep $difference
fi

与えられた時間と現在の時間との差(秒)を計算します。数値が負の場合は、睡眠時間を秒単位で取得するために、1日全体(正確に86400秒)に秒数を加える必要があります。数値が正の場合はそれを使用できます。

おすすめ記事