クロンオフセット5分のスケジュール


22

5分ごとに実行するように設定されたcronスクリプトをオフセットすることは可能ですか?

2つのスクリプトがあります。スクリプト1は1つのデータベースからデータを収集して別のデータベースに挿入し、スクリプト2はこのデータと他の多くのデータを引き出して、そこからいくつかのきれいなレポートを作成します。両方のスクリプトを5分ごとに実行する必要があります。スクリプト2を1分オフセットして、新しいデータからレポートを作成できるようにします。たとえば、スクリプト1を1 時間ごとに実行し:00, :05, :10, :15 [...]、スクリプト2を:01, :06, :11, :16 [...]1時間ごとに実行する必要があります。スクリプトは相互に依存していません。スクリプト1が成功したかどうかに関係なく、スクリプト2を実行する必要があります。ただし、レポートに最新のデータが含まれていると便利です。これはcronで可能ですか?

役職;
私はシェルスクリプトで両方のコマンドを使用してすぐに実行することを考えましたが、これは機能しません。外部APIなどを待つとスクリプト1がハングアップすることがあり、実行に最大15分かかることがありますが、スクリプト2は5分ごとに実行する必要があるため、この方法で実行するとスクリプト2の実行が停止または遅延します。これをCronで設定できる場合、スクリプト1の実行に関係なくスクリプト2が実行されます。

回答:


14

いつでもスクリプトを実行できますcron。5分ごとにスクリプト1を実行する場合、次のように開始できます。

*/5 * * * * /path/to/script1

しかし、これは本当に次の略記です:

0,5,10,15,20,25,30,35,40,45,50,55 * * * * /path/to/script1

スクリプト1の1分後にスクリプト2を実行する場合は、次の操作を実行できます。

1,6,11,16,21,26,31,36,41,46,51,56 * * * * /path/to/script2

これを行うこともできます:

*/5 * * * * /path/to/script1
*/5 * * * * /path/to/script2

そして、スクリプト2の開始時に1分間スリープします。

sleep 60

4
スクリプト自体にスリープを設定することは、プロンプトから手作業でスクリプトを実行するのが苦痛であるいハックです。スリープをcrontabエントリの一部にすることでハッキングするlessい方法それほどありませんが、さらにエレガントな方法は、正しいcrontab表記を使用してジョブをオフセットすることです。これは答えには触れません。
カレブ

39

crontabの分入力フィールドは、「増分」演算子を受け入れます。これは、数学的な「除算」演算子であるように見えますが、そうではないため、一種の混乱を招きます。ほとんどの場合、次のようなものが使用されています。これは、5で割り切れる数を見つけるのではなく、セットから5番目ごとのアイテムを取得することに注意してください。

 */5 * * * * command

これにより、cronは0〜59 /5分のセット()から5番目ごとに一致するように指示し*ます()が、次のようにセットを変更できます。

 1-59/5 * * * * command

これは、セット1〜59から5番目ごとにアイテムを取得し、6、11、16分などでコマンドを実行します。

1分以上のきめ細かいオフセットが必要な場合は、次のようにcrontabの一部としてsleepコマンドを使用してハックできます。

 */5 * * * * sleep 15 && command

これは5分ごとにジョブを実行しますが、コマンドは実際には1分後の15秒まで開始されません。他の何かから数秒後にすべての違いが生じる短い実行中のジョブの場合、1分遅れることを望んでいない場合、これは十分に単純なハックです。


1
これは受け入れられているものよりも良い答えです。範囲を介したオフセットの設定は、スリープよりもずっとクリーンです。
NDオタク

11

+記号で時間オフセットを示すことができます。たとえば、で実行するには:01, :06, :11, :16 [...]、次のようなタスクを作成します

*/5+1 * * * * command

7
これはcronの一部のバージョンでは機能しないようです
jhoff

1
この構文をサポートするcronのどのバージョンを使用していますか?Cronieはそれをサポートしていないようです。
マシューG

私はCentOS7でCronieを使用しているため、最初にこのソリューションを試すことはありません。
-AnneTheAgile

1

これは私のために働いた:

1/5 * ? * * *

1はオフセット分です。したがって、3分間オフセットする場合:

3/5 * ? * * *

これはAWSのスケジュール設定で機能しています

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