Aller au contenu principal

52. Schedule Tasks to Run at a Set Date and Time


개요

Linux 시스템은 작업 실행 자동화를 위한 세 가지 주요 도구를 제공합니다:

  • Cron: 반복 작업
  • Anacron: 다운타임이 있는 시스템
  • At: 일회성 예약

Cron 유틸리티

Cron은 일정 간격으로 실행되는 반복 작업을 처리합니다. 구문은 5개의 시간/날짜 필드와 명령어로 구성됩니다:

분 시 일 월 요일 명령어
필드범위
분 (Minute)0–59
시 (Hour)0–23
일 (Day of month)1–31
월 (Month)1–12
요일 (Day of week)0–6 (일요일 = 0 또는 7)

특수 문자:

  • * = 모든 값
  • , = 여러 값
  • - = 범위
  • / = 간격

개인 cron 테이블 편집:

crontab -e

예시 항목:

35 6 * * * /usr/bin/touch test_passed      # 매일 오전 6:35
0 3 * * 0 /usr/bin/touch test_passed # 매주 일요일 오전 3:00
0 3 15 * * /usr/bin/touch test_passed # 매월 15일 오전 3:00

cron 작업 관리:

crontab -l              # 작업 목록
crontab -r # 작업 제거
sudo crontab -e -u [user] # 다른 사용자의 작업 편집
# ex) sudo crontab -e -u jane

대안: /etc/cron.daily, /etc/cron.hourly, /etc/cron.weekly, /etc/cron.monthly에 스크립트 배치

/etc/crontab 실제 예시

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

# * * * * * 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 )
/etc/crontab vs crontab -e
  • /etc/crontabusername 필드가 있음 (어떤 유저로 실행할지 명시)
  • crontab -e는 현재 유저 전용이라 username 필드 없음
  • /etc/cron.d/ 내 파일들도 동일하게 username 필드 포함

Anacron

Anacron은 항상 실행되지 않는 시스템에서 주기적인 작업을 실행합니다. 시스템 재시작 후 누락된 작업을 처리합니다.

설정 파일: /etc/anacrontab

구문 필드:

  1. 기간 (일 단위)
  2. 시작 후 지연 (분)
  3. 작업 식별자
  4. 실행할 명령어

예시:

3 10 test_job /usr/bin/touch /root/anacron_created_this

구문 확인:

anacron -T

Anacron 실행 로그 확인

grep anacron /var/log/syslog        # Ubuntu/Debian
grep anacron /var/log/cron # RHEL/CentOS
로그에서 확인할 수 있는 것
  • 작업이 언제 시작/종료됐는지
  • 작업이 정상 완료됐는지 (Job 'test_job' terminated)
  • 마지막 실행 타임스탬프는 /var/spool/anacron/ 에 저장됨
ls /var/spool/anacron/    # 각 작업의 마지막 실행 날짜 확인
cat /var/spool/anacron/test_job

At 유틸리티

at 도구는 반복 작업이 아닌 일회성 작업을 예약합니다.

기본 사용법:

at '15:00'
at> /usr/bin/touch file_created_by_at
at> <CTRL-D>

시간 형식:

at 'August 20 2024'
at '2:30 August 20 2024'
at 'now + 30 minutes'
at 'now + 3 hours'

작업 관리:

atq              # 예약된 작업 목록
atrm [job_id] # 작업 제거

at -c 1

각 도구의 용도:
  • Cron: 반복 작업
  • Anacron: 다운타임 시 신뢰성
  • At: 단일 실행