cron과 anacron의 차이

cron

cron은 정확히 지정된 시간, 주기로 반복적인 작업을 예약합니다. crontab의 각 필드는 아래와 같습니다:

분 시 일 월 요일 [권한] [명령어]

1 4 * * 0 root /root/backup.sh

 

이 설정은 매주 일요일(0) 4시 1분에 루트권한으로 /root/backup.sh 스크립트를 실행하게 합니다.
crontab -e 명령으로 개인 사용자별 크론 작업을 설정할 수 있습니다. -l 옵션은 현재의 설정을 출력하고, -r옵션으로 작업 삭제가 가능합니다. (-e옵션으로 들어가 삭제해도 됩니다.)

anacron

anacron은 정확한 시간과 주기가 아니라, 조금 더 융통성 있게 반복 작업을 실행합니다. 정해진 주기 내에 실행된 적이 없다면 그 주기마다 실행하되, 컴퓨터 리부팅시 부팅 후의 지정된 딜레이 후에 실행됩니다. 만약 리부팅없이 계속 켜져 있는 컴퓨터라면 주기적으로 지정된 시간내에 약간씩의 딜레이(랜덤)를 주어 실행되게 합니다.

/etc/anacron에 설정되어 있습니다.  이 파일을 열어보면 아래와 같습니다.

# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22

#period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly

 

위의 설정은 CentOS 7.4의 기본 설정입니다. 일단 하단의 매일의 cron.daily작업을 보면, 하루 주기의 작업은 리부팅시 5분뒤 실행합니다. 그런데, 오늘 이미 한 번 실행했는데, 컴퓨터가 꺼졌다 다시 켜졌다면, 지난 하루 주기내에 한 번 이미 실행했기 때문에 다시 실행하지 않습니다. 만약 리부팅없이 24시간 계속 켜져 있다면, START_HOURS_RANGE의 시간 내에 주기적으로 실행됩니다. 위에서는 3시-오후10시 사이입니다. 그 시간중 RANDOM_DELAY에서 지정된 분만큼 랜덤의 딜레이가 주어지고 나서 실행됩니다.

위의 설정에서는 매일 컴퓨터가 꺼지지 않고 돌아간다고 가정하면, 매일 새벽 3시부터 45분 이내의 랜덤딜레이가 주어진 후에, cron.daily에 설정된 일간 반복 작업이 실행되는 것입니다.

차이

cron은 무조건 정해진 시간에만 주기적인 실행을 반복합니다. 그런데, 마침 딱 그 정해진 실행 시간에 컴퓨터가 꺼져 있었다면? 그 작업은 실행되지 못합니다. 그럼, 이번엔 실행이 안되고, 다음 주기에 실행됩니다. 매일의 백업 스크립트라면, 어쩌다 그 시간에 컴퓨터가 꺼져 있었다면, 그날의 백업은 아예 없습니다.

anacron은 더 융통성이 있어서, 정해진 주기 내에 실행을 못하고 컴퓨터가 꺼져 있었다면, 컴퓨터 부팅후에 실행합니다. 컴퓨터가 계속 켜져 있었다면, 정해진 시간에(그것도 융통성 있게 약간씩 다른 텀을 주고) 실행됩니다. 어쨌든 시간에 융통성을 주고서라도 빠뜨리지 않고, 주기마다 실행할 필요가 있다면 anacron을 쓰는 것이 더 효과적입니다.