cronジョブ、ランダム開始、ただし時間枠内


11

1日1回、毎日0900から1200の間でスクリプトを実行したいのですが
、ダッシュの構文については完全9-12にはわかりません。スクリプトが毎時間実行されるのか、それとも次の間にランダムに開始されるのですか?9-12?後者が必要だからです。

回答:


7

ランダムな時間にジョブを実行する方法を持つcron実装を見たことがありません。奇妙な要件です。ドキュメントに記載されているように9-12、はのショートカットであり9,10,11,12、1時間ごとに9〜12を意味します。

ランダムな時間にジョブを実行する場合は、間隔の開始時にジョブを実行し、ランダムな遅延を追加します。たとえば、9〜12のランダムな時間に実行するには、次のように入力します。

SHELL=/bin/bash
0 9 * * * sleep $((3600 * (RANDOM % 4))); do_stuff

RANDOMbashまたはksh が必要なことに注意してください。デフォルトのシェルでは使用できない場合があります。

9から12の間のランダムな時間で実行し、2番目の解像度で実行したい場合はRANDOM % 10800、遅延として使用できますが、RANDOMは0..32767の範囲であるため、0から32768%10800の間の遅延に偏ります。 368.このバイアスを回避するには:

SHELL=/bin/bash
0 9 * * * max=$((32768/10800*10800)); while delay=$RANDOM; ((delay > max)); do :; done; sleep $((delay % 10800)); do_stuff

5
「これは奇妙な要件です。」同意しません。多くのアプリケーション、特にサーバーに定期的にチェックインする必要があるアプリケーション(パッケージマネージャーや構成管理クライアントなど)は、雷鳴の群れの状況を回避するために、実行時間を広げる必要があります。実際、そのようなアプリケーションの多くにはスプレイオプションが組み込まれていますが(--randomwaityumへの引数や--splaychef-clientへの引数など)、そうでないアプリケーションでは、ランダムな実行時間がジョブスケジューラに役立つ機能です。
jayhendren 2016

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.