毎分、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分以上かかる可能性がある場合は、同時に実行できることを確認するか、同時に実行しないようにする必要があります。