3

ランダムな時間に 1 日 1 回シェル スクリプトを実行する必要があります。(つまり、00:00 ~ 23:59 の間で毎日 1 回)。

私はsleepコマンドも知っていcronますが、

  • cronランダムな時間はありません
  • そしてsleep解決策 - あまり良くありません - 私の考えは、スクリプトを毎晩真夜中に起動し、スクリプトの開始時にランダムな時間にスリープすることです。

ここにもっとエレガントなものがありますか?

4

5 に答える 5

10

atコマンドがあれば、cronとを組み合わせることができますat

次のスクリプトを毎晩深夜に cron から実行します。

#!/bin/bash
script="/tmp/script.sh"      #insert the path to your script here
min=$(( 24 * 60 ))
rmin=$(( $RANDOM % $min ))
at -f "$script" now+${rmin}min

上記はat毎晩深夜にコマンドを実行し、ランダムな時間にスクリプトを実行します。atrunコマンドが開始される頻度を crontab で確認する必要があります。(atrunは、 に格納されたコマンドを実行しますat)

sleepこの方法と比較した主な利点は、システムの再起動後も「生き残る」ことです。

于 2013-06-01T14:40:31.707 に答える
6

sleep0 から 86400 秒の間のランダムな時間に、真夜中にスクリプトを起動するだけです。私のbash$RANDOMは0から32767の間の数値を返すので:

sleep $(( ($RANDOM % 1440)*60 + ($RANDOM % 60) ))
于 2013-06-02T12:40:03.613 に答える
5

に代わる最良の方法cronはおそらくat

は通常、at標準入力からコマンドを読み取りますが、 でジョブのファイルを与えることができます-f

時間的には、多くの形式を指定できます。たぶんあなたの場合、最も便利なのは

  • at -f jobs now + xxx minutes

1ここで、スクリプトは xxx にから1440(1 日 1440 分)までのランダムな値を与えjobs、実行したいコマンドを含みます。

于 2013-06-01T14:40:07.470 に答える
1

cron を使用して bash スクリプトを起動できます。これにより、疑似乱数のタイムスタンプが生成され、UNIX プログラムに渡されます。at

あなたは bash と cron に十分精通しているようですので、簡単に理解atできるでしょう。ドキュメンテーションはいつものように "man at" または wiki を試すことができます

http://en.wikipedia.org/wiki/At_(Unix)

于 2013-06-01T14:39:44.430 に答える
1

プログラムが最後に行うこととして、sed を実行して crontab にパッチを適用し、次の開始時刻を変更することを妨げるものは何もありません。私はよく眠れませんでした。

于 2013-06-01T14:41:10.447 に答える