1

シェルコマンドとして「一週間ずっと仕事を休む」ためのスクリプトを誰かに教えてもらえますか。

すべての実行でスリープする前に、次の週の日付と時刻を計算する必要があります。

少し便利なものを見つけました

startTime=$(date +%s) 

endTime=$(date -d "next week" +%s)

timeToWait=$(($endTime- $startTime)) sleep $timeToWait 
4

4 に答える 4

4
date -d "next week"

言い方が違う

date -d "7 days"

これは「今から 7 日後」を意味しますが、これは次の週の始まりではなく、おそらくあなたが望むものでもありません。それ必要で、使用している場合はGNU sleep、次のコマンドを発行できます。

sleep 7d

スクリプトを 7 日間スリープ状態にします。GNU スリープを使用していない場合は、7 日間隔を秒に変換する必要があります。

sleep 604800

翌週の開始が必要な場合は、これがksh、または でさえ役立つ場合がありbashます。

let time=`date -d "next monday" +%s`-`date +%s`
sleep $time

とはいえ、この仕事には間違ったツールを使用していると思います。sleepシステムの再起動からシェル プロセスの強制終了まで、その間にさまざまなことが発生する可能性があります。

crondおよびcrontabatdさらにはfrconanacronなどatのより最新のバリアント/補足を確認する必要があります。cron

于 2012-08-06T15:46:20.300 に答える
1

なぜ1週間の睡眠が必要なのかお聞きしてもよろしいですか?

プロセスを1週間待ってから再試行/何かをしたい場合は、cronジョブの方が良いかもしれません。2つの理由 -->

1) 資源を節約する

2) なんらかの理由でシステムを再起動/ダウンする必要がある場合、シェル スクリプトが停止し、待っていたことは何も起こりません。

一方、cron ジョブは実行したいときに正確に実行され、そのようなシナリオからあなたを救います。いくつかの有用な例は、以下のリンクにあります

http://www.thegeekstuff.com/2009/06/15-practical-crontab-examples/

これは身をもって体験したから知った!:)

于 2012-08-09T16:20:06.527 に答える
0

私は 1 回の長時間の待機に対して警告しましたが、1 週間の待機時間でこれを行うことはありません。しかし、私は過去にこれのバリエーションを使用しました:

 waittime=
 interval=

 : ${waittime:?specify wait time in seconds}
 : ${interval:?specify interval in seconds}

 t0=SECONDS
 target=$(( t0 + waittime ))

 until
     (( SECONDS > target ))
 do
     sleep $interval
 done
于 2012-08-06T16:01:02.193 に答える
0

coreutils sleepは後置をサポートしているdので:

sleep 7d

7日間寝ます。

于 2012-08-06T09:22:59.080 に答える