[shell script] anacron : 놓친 작업 소급 실행

HYEOB KIM·2022년 4월 27일
0

Shell

목록 보기
64/71

anacron

cron을 사용할 때 불편한 점은 리눅스 시스템이 꺼졌다가 다시 켜졌을 때 놓친 작업은 실행되지 않는다는 것입니다.

이를 해결할 수 있는 것이 바로 anacron입니다.

anacron은 예약된 실행을 놓친 작업이 있는지 판단하고 될 수 있는 대로 빨리 작업을 소급 실행합니다.

한계

일단위 스케줄링 작업부터 지원합니다.
(시단위는 자주 실행해야 하는 스크립트이므로 처리하지 않습니다)

$ cd /var/spool/anacron
$ ls
cron.daily  cron.monthly  cron.weekly

패키지 설치

sudo apt install -y anacron

anacron 대상 인식

anacron의 작동 대상은 /etc/cron.daily, /etc/cron.weekly, /etc/cron.monthly 디렉토리에 있는 프로그램들입니다.

anacron 테이블

/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/crontabanacron의 실행이 스케줄링 되어 있습니다.
$ 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 )
#

anacron 작동 확인

작업이 제대로 예약된 간격으로 실행되고 있는지 확인하려면 /var/spool/anacron/ 경로에 cron.daily, cron.monthly, cron.weekly에 타임스탬프가 찍혀 있는지 확인하면 됩니다.

$ sudo cat /var/spool/anacron/cron.daily
20220427
profile
Devops Engineer

0개의 댓글