web-dev-qa-db-ja.com

@hourly vs 0 * * * *-Cron-1時間ごとにジョブを実行する方法、ただし時間は異なる

1時間ごとに実行したいが、必ずしも同時に実行したくないジョブがあるので、

0 * * * * job 

平均は、毎時0分にドットで実行されます。

私も使用できることを知っています

@hourly job

もしあれば違いは何ですか?ジョブを1時間ごとに実行するようにスケジュールできますが、すべて同時に実行することはできませんか?

5

から crontab(5)

@hourly:1時間に1回実行します。 "0 * * * *"

だからそれは厳密に同じです。

時間内のさまざまな時点でジョブを実行する(または負荷を分散するために複数のジョブを実行する)には、ジョブを開始する前にランダムな時間スリープできます。

@hourly sleep $((RANDOM / 10)); dowhatever

これは最大3276秒(約1時間)スリープし、ジョブを実行します。したがって、cronがジョブを開始するたびに、実際に開始する前に異なる時間待機します。

8
Stephen Kitt

@hourlycrontab0 * * * *の完全な同義語であり、違いはありません。 @hourlyは、0 * * * *の特別な文字列表現です。

man 5 crontabから:

string         meaning
------         -------
@hourly        Run once an hour, "0 * * * *".

ちょうど注意してください、私が持っているcronによってサポートされている合計8つの特別な文字列があります、Vixie Cron。

2
heemayl

Jenkins Cron/Build定期的方法論を共有したかっただけです。 H(hash)がオプションであった通常のCronでこのようなものを見るのは良いことです

Examples:

# every fifteen minutes (perhaps at :07, :22, :37, :52)
H/15 * * * *
# every ten minutes in the first half of every hour (three times, perhaps at :04, :14, :24)
H(0-29)/10 * * * *
# once every two hours at 45 minutes past the hour starting at 9:45 AM and finishing at 3:45 PM every weekday.
45 9-16/2 * * 1-5
# once in every two hours slot between 9 AM and 5 PM every weekday (perhaps at 10:38 AM, 12:38 PM, 2:38 PM, 4:38 PM)
H H(9-16)/2 * * 1-5
# once a day on the 1st and 15th of every month except December
H H 1,15 1-11 *
2

モジュラス演算子を使用して、時間の境界を明示的に制限することもできます。
起動を最大10分(600秒)に制限する場合の方法は次のとおりです。

$RANDOM % 600は0〜600の結果を生成します。

@hourly sleep $(( $RANDOM % 600 )) && /path/to/your/script

sleepはとにかく実行されるため、ここでは&&を使用します。

0
Igniter