Crontabの注文はさまざまなスケジュールに従って実行されます。

Crontabの注文はさまざまなスケジュールに従って実行されます。

毎分、10分、1時間、毎日など、特定のタスクを実行するために異なる時間を持つcrontabがあります。これらのクローンのいくつかが同時に一致すると問題があります。たとえば、10分、さらに1分間cronを実行すると、このcronは並列に実行されます。しかし、すべてのタスクを1分以内に、すべてのタスクを10分以内に順番に実行したいと思います。どうすればいいですか?

答え1

クローン自体の場合は、実際にはそうできないと思います。スクリプトを使用してこの問題を解決できます。毎分 cron でスクリプトを実行し、それとは異なる間隔でタスクを実行します。このような:

クローンタブ項目:

* * * * * /path/to/main_script.sh

そしてmain_script.sh

#!/bin/sh
mins=$[ $(date +%s) / 60 ]           # current time, rounded to minutes
run_1min_task.sh
if [ $[ $mins % 10 ] -eq 0 ] ; then  # mins divisible by 10 ?
    run_10min_task.sh                # run the every 10 min task
fi
if [ $[ $mins % 60 ] -eq 0 ] ; then  # same for 1 hour
    run_1hour_task.sh
fi 
if [ $[ $mins % 1440 ] -eq 0 ] ; then # 1440 = 24*60
    run_daily_task.sh
fi

毎日のジョブの実行時間に興味がある場合は、タイムゾーンを考慮する必要があり、上記のコマンドはUTC 00:00に実行する必要があります。変更するには、ゼロ以外の値と比較してください。

また、ジョブが1分以上かかる可能性がある場合は、同時に実行できることを確認するか、同時に実行しないようにする必要があります。

関連情報