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 명령어를 실행해준다.
    • 쉘스크립트 및 쉘명령어 적용 가능

크론탭 기본 명령어

명령어 설명
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
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를 사용하여 사용자 단위 작업을 등록한다.

요약

  1. 크론은 주기적으로 명령어를 실행할 수 있는 작업 스케줄러이다.
  2. crontab -e로 작업을 등록하고, -l, -r로 조회 및 삭제할 수 있다.
  3. 경로 문제는 자주 발생하는 오류이며, 스크립트에서 실행 위치를 명시해야 한다.
  4. 시스템 수준 크론 작업은 별도의 위치에서 관리된다.