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/crontab은 username 필드가 있음 (어떤 유저로 실행할지 명시)crontab -e는 현재 유저 전용이라 username 필드 없음/etc/cron.d/내 파일들도 동일하게 username 필드 포함
Anacron
Anacron은 항상 실행되지 않는 시스템에서 주기적인 작업을 실행합니다. 시스템 재시작 후 누락된 작업을 처리합니다.
설정 파일: /etc/anacrontab
구문 필드:
- 기간 (일 단위)
- 시작 후 지연 (분)
- 작업 식별자
- 실행할 명령어
예시:
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: 단일 실행