매 분, 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에 실행해야 합니다. 변경하려면 0이 아닌 값과 비교하세요.
또한 작업이 1분 이상 걸릴 가능성이 있는 경우 동시에 실행될 수 있는지 확인하거나 동시에 실행되지 않도록 해야 합니다.