cron
을 사용할 때 불편한 점은 리눅스 시스템이 꺼졌다가 다시 켜졌을 때 놓친 작업은 실행되지 않는다는 것입니다.
이를 해결할 수 있는 것이 바로 anacron
입니다.
anacron
은 예약된 실행을 놓친 작업이 있는지 판단하고 될 수 있는 대로 빨리 작업을 소급 실행
합니다.
일단위
스케줄링 작업부터 지원합니다.
(시단위
는 자주 실행해야 하는 스크립트이므로 처리하지 않습니다)
$ cd /var/spool/anacron
$ ls
cron.daily cron.monthly cron.weekly
sudo apt install -y anacron
anacron
의 작동 대상은 /etc/cron.daily
, /etc/cron.weekly
, /etc/cron.monthly
디렉토리에 있는 프로그램들입니다.
/etc/anacrontab
파일에 작업 디렉토리를 확인하는 anacron
자체 테이블을 가지고 있습니다.
$ cat /etc/anacrontab
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
HOME=/root
LOGNAME=root
# These replace cron's entries
1 5 cron.daily run-parts --report /etc/cron.daily
7 10 cron.weekly run-parts --report /etc/cron.weekly
@monthly 15 cron.monthly run-parts --report /etc/cron.monthly
period
(첫번째 열) : 얼마나 자주
작업이 실행되어야 하는지delay
(두번째 열) : 시스템이 시작되고 얼마 후
(분 단위)에 anacron
이 실행되어야 하는지identifier
(세번째 열) : 빈 칸이 없는 고유 문자열. 고유 로그 메시지 및 오류 이메일에서 작업을 식별하는데 사용.command
(네번째 열) : anacron
을 실행할 명령어참고
/etc/crontab
에anacron
의 실행이 스케줄링 되어 있습니다.$ sudo cat /etc/crontab # /etc/crontab: system-wide crontab # Unlike any other crontab you don't have to run the `crontab' # command to install the new version when you edit this file # and files in /etc/cron.d. These files also have username fields, # that none of the other crontabs do. SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed 17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) #
작업이 제대로 예약된 간격으로 실행되고 있는지 확인하려면 /var/spool/anacron/
경로에 cron.daily
, cron.monthly
, cron.weekly
에 타임스탬프가 찍혀 있는지 확인하면 됩니다.
$ sudo cat /var/spool/anacron/cron.daily
20220427