ランダムにcronを介してスクリプトを実行しますが、1日に特定の回数だけ実行します。

ランダムにcronを介してスクリプトを実行しますが、1日に特定の回数だけ実行します。

1日2〜3回、24時間、毎回異なる時間にスクリプトを実行できるようにしたいです。

何をお勧めしますかシンプルで信頼できる解決策?

答え1

1日2回スクリプトを実行します。

0 0,12 * * * sleep $(( $$ \% 21600 )); /path/to/script.sh

これにより、正午と真夜中の作業が開始され、次にスクリプトを開始する前に最大6時間(12時間間隔の半分)の間スリープモードに切り替わります。

1日3回スクリプトを実行します。

0 0,8,16 * * * sleep $(( $$ \% 14400 )); /path/to/script.sh

これにより、深夜、午前8時、午後4時に作業が開始され、スクリプトを開始する前に最大4時間(8時間間隔の半分)待機します。

Ubuntuでタグ付けしたので、デフォルト/ bin / shでbashがあるかもしれません。これは$ RANDOMを説明しているようです(RANDOMはPOSIXが指定されていませんが)。したがって、予測不可能性を高めるために、Zwansの答えを次のように置き換えてください。

1日2回実行:

0 0,12 * * * sleep $(( RANDOM \% 21600 )); /path/to/script.sh

1日3回実行:

0 0,8,16 * * * sleep $(( RANDOM \% 14400 )); /path/to/script.sh

私はこれをに変更します&&;これは、「睡眠コマンドが正常に終了するのを待ちます」から「スケジュールされた時間の間、睡眠が完了したか終了するかにかかわらず、睡眠」に意味を変更します。また参考にしてください%脱出する必要がありますcron コマンドの一部である場合、そうでない場合は改行文字として解釈されます。

答え2

0 */12 * * * sleep $((RANDOM%x)) && /bin/sh -c /path/to/script.sh

遅延時間は 0 からの間なので、xその値を直接設定してください。これは、ランダムな遅延を含む12時間ごとに実行する必要があります。

を使用して実行されていることを確認してくださいbash

関連情報