ランダムな時間に 1 日 1 回シェル スクリプトを実行する必要があります。(つまり、00:00 ~ 23:59 の間で毎日 1 回)。
私はsleep
コマンドも知っていcron
ますが、
cron
ランダムな時間はありません- そして
sleep
解決策 - あまり良くありません - 私の考えは、スクリプトを毎晩真夜中に起動し、スクリプトの開始時にランダムな時間にスリープすることです。
ここにもっとエレガントなものがありますか?
ランダムな時間に 1 日 1 回シェル スクリプトを実行する必要があります。(つまり、00:00 ~ 23:59 の間で毎日 1 回)。
私はsleep
コマンドも知っていcron
ますが、
cron
ランダムな時間はありませんsleep
解決策 - あまり良くありません - 私の考えは、スクリプトを毎晩真夜中に起動し、スクリプトの開始時にランダムな時間にスリープすることです。ここにもっとエレガントなものがありますか?
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
この方法と比較した主な利点は、システムの再起動後も「生き残る」ことです。
sleep
0 から 86400 秒の間のランダムな時間に、真夜中にスクリプトを起動するだけです。私のbash$RANDOM
は0から32767の間の数値を返すので:
sleep $(( ($RANDOM % 1440)*60 + ($RANDOM % 60) ))
cron を使用して bash スクリプトを起動できます。これにより、疑似乱数のタイムスタンプが生成され、UNIX プログラムに渡されます。at
あなたは bash と cron に十分精通しているようですので、簡単に理解at
できるでしょう。ドキュメンテーションはいつものように "man at" または wiki を試すことができます
プログラムが最後に行うこととして、sed を実行して crontab にパッチを適用し、次の開始時刻を変更することを妨げるものは何もありません。私はよく眠れませんでした。