Unix:指定した時間までスリープ


12

コマンドラインで指定された時間までスリープする(準)標準のUnixコマンドはありますか?つまり、sleep継続時間ではなくウェイクアップ時間がかかるようなものを探しています。

例えば: sleeptill 05:00:00

私は何かをコード化することはできますが、すでに何かがそこにある場合は、ホイールを再発明したくありません。

おまけの質問:(のようにsleeptill 05:00:00 America/New_York)タイムゾーンをとることができれば素晴らしいでしょう。

編集私がやっていることの性質上、「Tでコマンドを実行」ソリューションではなく「Tまでスリープ」ソリューションを探しています。

編集私は18:00にコマンドを実行し、午前17時00分目を覚ますためにそれを伝えるならば誤解を避けるためには、私はいくつかのコーナーケースが夏時間に関係することで、23時間の睡眠にそれを期待して(または、 22または24時間。)


使用できるcronと思います。
Bobby

ありがとう、しかし意図された使用のためにそれは本当にのようでなければなりませんsleep
NPE

回答:


18

まともな日付コマンドがあり、bashを使用しているUnixを使用している場合は、時間の計算に%s形式を使用できます。

sleep $(( $(date -j 1700 +%s) - $(date +%s) ))

(1700は午後5時で、-jは実際に日付を設定しないように日付を指示します)


(+1)提案。18:00にコマンドを実行し、17:00にウェイクアップするように指示すると、23時間(または、夏時間に関係する一部のケースでは、22時間または24時間)スリープすることが予想されます。これは残念ながら提案が失敗するところです。[私も変更しなければならなかった-j-d。それは私のLinuxシステム上で実行するために]
NPE

7
@aix:Linux(およびGNU日付を使用する他のシステム)では、などの高度な日付指定を使用できますdate -d 'tomorrow 17:00'
Gilles「SO-邪悪なことをやめなさい」

3
@NPE、ところで、reminder-divisionを使用することで補正できますecho $(( ($(date -d "3:00" +%s) - $(date +%s) + (60*60*24)) % (60*60*24) ))(DSTの変更に関してはいくつかの問題があるだけかもしれません)
hvr

13

これはどうですか(w00tとGilleのアイデアを関数に結合する)?

function sleep_until {
  seconds=$(( $(date -d "$*" +%s) - $(date +%s) )) # Use $* to eliminate need for quotes
  echo "Sleeping for $seconds seconds"
  sleep $seconds
}

使用法:

sleep_until 8:24
Sleeping for 35 seconds

sleep_until '23:00'
Sleeping for 52489 seconds

sleep_until 'tomorrow 1:00'
Sleeping for 59682 seconds

9

linux / unix atコマンドを確認してください。5AMの例を使用:

at 05:00 some_command

また、タイムゾーンもサポートしています。

GMT、UCT、またはZULU(大文字と小文字を区別しない)のタイムゾーン名は、時刻が協定世界時であることを指定するために後に続きます。その他のタイムゾーンは、TZ環境変数を使用して指定できます。


(+1)提案。残念ながら、それは私のワークフローに自然には適合しません。一連の処理を順番に実行するスクリプトがあり、特定のステップが特定の時間まで開始されないようにしたいと考えています。もちろん、これはcronまたはを使用するものに変換できatますが、管理が面倒です。これが私が何かのようsleepなものを探している理由です。今のところ、私は自分で書きました。
NPE、2010

ああ、それであなたはブロッキングスケジュールが欲しい。プロセスの各ステップを追跡する状態ファイルがないのはなぜですか?
Jeremy L

できるかもしれませんが、必要以上に複雑に聞こえます。手順は異なるコマンドであり、シェルスクリプトはワークフローを調整するものです。スクリプトで "午後5時まで寝ること"ができることが本当に必要です。
NPE

その場合、w00tの答えはまさにあなたが求めているものかもしれません。
ジェレミーL

はい、それは間違いなく正しい精神にあります。悲しいことに、それはいくつかの重要な(私にとって)ケースで故障し、タイムゾーンを実行しません。
NPE、2010
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.