13. 크론 작업
크론(cron)은 리눅스 및 유닉스 계열 시스템에서 일정한 시간 간격으로 명령어나 스크립트를 자동 실행하는 스케줄러이다.
크론의 구성 요소
1. 크론 데몬 (cron daemon
)
-
cron
데몬은 백그라운드에서 실행되며 다음 위치의 설정을 참조한다:/etc/crontab
/var/spool/cron/
디렉터리 아래 사용자별 크론 파일
2. 크론탭 (crontab
)
- 각 사용자는 개인별 크론탭(crontab) 파일을 가질 수 있다.
- 시스템 전체에 영향을 미치는 전역 크론탭도 존재한다.
크론탭 형식
* * * * * 명령어
│ │ │ │ │
│ │ │ │ └── 요일 (0–7) (0 또는 7 = 일요일)
│ │ │ └──── 월 (1–12)
│ │ └────── 일 (1–31)
│ └──────── 시 (0–23)
└────────── 분 (0–59)
- [* * * * *] 시간 조건이 되면 뒤의
명령어
를 실행한다.- 예: * * * * * /path/to/backup.sh -> 매 분 마다 (* * * * *)
/path/to/backup.sh
명령어를 실행해준다. - 쉘스크립트 및 쉘명령어 적용 가능
- 예: * * * * * /path/to/backup.sh -> 매 분 마다 (* * * * *)
크론탭 기본 명령어
명령어 | 설명 |
---|---|
crontab -e | 크론탭 편집 |
crontab -l | 현재 사용자 크론탭 목록 보기 |
crontab -r | 현재 사용자 크론탭 삭제 |
크론탭 문법
- 매 시간의 0분에 실행: `0 * * * *`
- 매일 12시 실행: `0 12 * * *`
- 매주 월요일 12시 실행: `0 12 * * 1`
- 매월 1일 12시 실행: `0 12 1 * *`
- 매일 10분 간격으로 실행: `/10 * * * *`
크론탭 설정 예시
# 매 시간의 0분에 백업 스크립트 실행
0 * * * * /path/to/backup.sh
# 매일 자정에 로그 파일 정리
0 0 * * * /path/to/log_cleanup.sh
# 매주 월요일 12시에 시스템 업데이트
0 12 * * 1 /path/to/system_update.sh
# 매일 오전 9시부터 오후 5시까지 매 30분마다 실행
*/30 9-17 * * * /path/to/your_script.sh
# 매월 1일부터 10일까지 매일 자정에 실행
0 0 1-10 * * /path/to/your_script.sh
#매주 월요일에서 금요일까지 매일 오후 2시에서 4시 사이 매 15분마다 실행
*/15 14-16 * * 1-5 /path/to/your_script.sh
#매년 1월과 6월의 매주 일요일 자정에 실행
0 0 * 1,6 0 /path/to/your_script.sh
#매일 오후 1시에서 3시까지 매 5분마다 실행
*/5 13-15 * * * /path/to/your_script.sh
특수 문자열 형식
형식 | 의미 | 일반 표현 |
---|---|---|
@reboot | 부팅 시 1회 실행 | (시작 시) |
@yearly 또는 @annually | 매년 1월 1일 00:00 | 0 0 1 1 * |
@monthly | 매월 1일 00:00 | 0 0 1 * * |
@weekly | 매주 일요일 00:00 | 0 0 * * 0 |
@daily 또는 @midnight | 매일 자정 | 0 0 * * * |
@hourly | 매시 정각 | 0 * * * * |
@reboot /path/to/init_script.sh
@daily /path/to/daily_task.sh
크론 로그 확인
-
크론 실행 기록은 다음 로그 파일에 저장된다:
- Debian/Ubuntu:
/var/log/syslog
- RHEL/CentOS:
/var/log/cron
- Debian/Ubuntu:
grep CRON /var/log/syslog
[실습] crontab 등록하기
실수 예시: 경로 문제
크론은 로그인 셸이 아니므로 현재 디렉터리(.
) 개념이 없다. 스크립트 실행 시 원하는 위치에 파일이 생성되지 않는 문제가 발생할 수 있다.
해결 방법 1: 절대 경로 사용
스크립트 내에서 절대 경로로 이동하도록 한다.
해결 방법 2: 실행 위치 지정
#!/bin/bash
pushd "$(dirname "$(readlink -f "$0")")" > /dev/null
workspace=$(pwd)
popd > /dev/null
cd "$workspace"
DATE=$(date +"%Y%m%d_%H%M%S")
touch "dummy_${DATE}"
[번외] 시스템 크론 작업
-
시스템 전체에 영향을 미치는 크론 설정은 다음 경로에 저장된다:
/etc/crontab
/etc/cron.d/
/etc/cron.daily/
,/etc/cron.weekly/
등 디렉터리 기반 자동 실행
사용자는 일반적으로
crontab -e
를 사용하여 사용자 단위 작업을 등록한다.
요약
- 크론은 주기적으로 명령어를 실행할 수 있는 작업 스케줄러이다.
crontab -e
로 작업을 등록하고,-l
,-r
로 조회 및 삭제할 수 있다.- 경로 문제는 자주 발생하는 오류이며, 스크립트에서 실행 위치를 명시해야 한다.
- 시스템 수준 크론 작업은 별도의 위치에서 관리된다.