소프트웨어 개발과 시스템 운영에서 자동화는 반복 작업을 줄이고 일관된 실행을 보장하는 핵심 요소다. 리눅스에서는 Crontab을 통해 특정 시각·주기로 명령·스크립트를 예약할 수 있다. 이 글에서는 Crontab의 정의, 기본 사용법(편집·보기·삭제), 5필드 표현식과 스케줄 옵션, 로그·백업·@reboot 활용, FAQ, 그리고 Anacron·systemd 타이머·Windows 작업 스케줄러와의 비교까지 다룬다.
![]() |
|---|
| Crontab 규칙 요약 |
Crontab이란
Crontab은 사용자가 시간 기반 예약 작업(cron job) 을 등록·편집·조회·삭제할 수 있게 해 주는 인터페이스다. 실제로 주기적으로 작업을 실행하는 것은 crond 데몬(서비스)이다. crond는 시스템에 상주하며 crontab에 등록된 시각이 되면 해당 줄의 명령을 실행한다. Windows의 작업 스케줄러(Task Scheduler) 와 개념이 비슷하다.
- cron 파일 위치: 사용자별 crontab은 보통
/var/spool/cron/crontabs/(Debian/Ubuntu) 또는/var/spool/cron/(RHEL/CentOS) 등에 사용자명으로 저장된다. 직접 이 파일을 편집하지 말고 반드시crontab명령으로만 수정해야 한다. - 적합한 용도: 매일 백업, 로그 로테이션, 주기적인 패키지 업데이트, 디스크 사용량 체크 등 최소 1분 단위로 반복되는 작업에 적합하다. 1분 미만 간격이 필요하면 다른 도구(예: systemd 타이머, 스크립트 루프)를 고려해야 한다.
아래 Mermaid 다이어그램은 사용자가 crontab을 편집한 뒤 crond가 작업을 실행하기까지의 흐름을 단순화한 것이다.
flowchart LR
subgraph userSide["사용자"]
A[사용자]
B["crontab -e 편집"]
C["crontab 파일 저장"]
end
subgraph daemonSide["시스템"]
D[crond 데몬]
E["스케줄 매칭"]
F["명령 실행"]
end
A --> B
B --> C
C -->|"파일 갱신"| D
D --> E
E -->|"시각 일치"| F
- 노드 ID:
userSide,daemonSide,A~F(예약어 미사용). - 라벨에 특수문자·등호가 있는 엣지는
"파일 갱신","시각 일치"처럼 큰따옴표로 감쌌다.
기본 사용법
crontab 명령 요약
| 옵션 | 설명 |
|---|---|
crontab -e | 현재 사용자의 crontab을 편집(기본 편집기 사용). 저장 후 자동 반영 |
crontab -l | 현재 사용자의 crontab 내용 나열 |
crontab -r | 현재 사용자의 crontab 전체 삭제(모든 예약 작업 제거) |
crontab -u 사용자명 -e | 지정 사용자의 crontab 편집(root 등 권한 필요) |
crontab -i -r | 삭제 전 확인 프롬프트 |
크론탭 항목 편집하기
편집 시에는 crontab -e를 사용한다. VISUAL 또는 EDITOR 환경 변수에 설정된 편집기(예: vi, nano)로 crontab 파일이 열린다. 한 줄이 하나의 예약 작업이며, 형식은 다음과 같다.
| |
앞의 다섯 필드는 분(0–59), 시(0–23), 일(1–31), 월(1–12), 요일(0–7) 이며, 공백으로 구분한다. 요일에서 0과 7은 일요일이다.
예: 매일 오전 8시에 실행하려면
| |
저장 후 편집기를 종료하면 crond가 변경 사항을 반영한다.
크론탭 항목 보기·삭제
- 보기:
crontab -l로 현재 사용자의 crontab 전체를 출력한다. - 삭제: 특정 줄만 지우려면
crontab -e로 해당 줄을 수동 삭제한다. 전체 삭제는crontab -r(확인 없음) 또는crontab -i -r(확인 후 삭제)를 사용한다.
삭제·수정 후에는 반드시 crontab -l 로 결과를 확인하는 것이 안전하다.
스케줄 표현식(5필드)
필드 순서와 허용 값, 자주 쓰는 특수문자를 정리하면 아래와 같다.
| 필드 | 의미 | 허용 값 | 특수문자 예 |
|---|---|---|---|
| 1 | 분 | 0–59 | * , - / |
| 2 | 시 | 0–23 | 동일 |
| 3 | 일 | 1–31 | 동일 |
| 4 | 월 | 1–12 | 동일 |
| 5 | 요일 | 0–7 (0,7=일요일) | 동일 |
*: 해당 필드의 모든 값(매분/매시/매일 등).,: 나열 (예:1,15→ 1일과 15일).-: 범위 (예:9-17→ 9시~17시)./: 간격 (예:*/15→ 15분마다,0-30/10→ 0,10,20,30분).
매분 실행
| |
특정 시각 실행
매일 오전 9시 30분:
| |
범위 실행
오전 9시부터 오후 5시까지 매시 정각:
| |
간격 실행
15분마다:
| |
특수 키워드(일부 구현)
| 키워드 | 의미 | 대략적인 표현식 |
|---|---|---|
@reboot | 부팅 시 1회 실행 | — |
@yearly / @annually | 매년 1월 1일 0시 | 0 0 1 1 * |
@monthly | 매월 1일 0시 | 0 0 1 * * |
@weekly | 매주 일요일 0시 | 0 0 * * 0 |
@daily / @midnight | 매일 0시 | 0 0 * * * |
@hourly | 매시 0분 | 0 * * * * |
배포판·버전에 따라 지원 여부가 다르므로 man 5 crontab 으로 확인하는 것이 좋다.
Crontab 사용 팁
한 줄에 하나의 명령
한 줄에 하나의 예약만 두면 가독성과 유지보수가 쉬워진다. 여러 명령을 묶으려면 스크립트로 만들고 그 스크립트 한 개만 cron에 등록하는 방식을 권장한다.
주석 활용
# 부터 줄 끝까지 주석이다. 작업 목적·담당·변경 이력을 주석으로 남기면 나중에 이해하기 쉽다.
| |
출력 비활성화
cron 작업에서 stdout/stderr가 나가면 기본적으로 메일로 전송될 수 있다. 메일이 필요 없으면 /dev/null 로 리디렉션한다.
| |
파일에 출력·로그 저장
표준 출력과 표준 에러를 모두 로그 파일로 남기려면:
| |
>> 는 추가, > 는 덮어쓰기다. 로그가 무한히 쌓이지 않도록 logrotate 등으로 로테이션하는 것이 좋다.
@reboot — 부팅 시 1회 실행
시스템이 부팅된 직후 한 번만 실행하려면:
| |
부팅 후 몇 분 뒤에 실행하고 싶다면 sleep 을 조합할 수 있다(구현에 따라 동작 여부가 다를 수 있음).
| |
활용 예시
시스템 유지 관리
매일 새벽에 패키지 목록 갱신 및 자동 보안 업데이트(배포판에 맞는 명령 사용):
| |
디스크 사용량 모니터링
매시 정각에 디스크 사용량을 체크하는 스크립트 실행:
| |
스크립트 안에서 임계값 초과 시 알림(메일, 슬랙 등)을 보내도록 구현할 수 있다.
예약 백업
매일 새벽 3시에 DB·파일 백업 스크립트 실행:
| |
백업 스크립트는 경로·권한·저장소를 명확히 하고, 실패 시 로그에 남기거나 알림을 보내는 것이 좋다.
FAQ
크론탭 작업의 출력을 로그 파일에 남기는 방법은?
명령 끝에 >> /path/to/logfile.log 2>&1 를 붙이면 stdout과 stderr가 해당 파일에 추가된다.
| |
로그 로테이션(logrotate) 설정을 함께 두면 디스크가 가득 차는 것을 방지할 수 있다.
크론탭 항목은 어떻게 백업하나요?
현재 사용자 crontab을 파일로 저장:
| |
다른 사용자(root 권한 필요):
| |
복원 시:
| |
백업 자체도 cron으로 정기 실행할 수 있다(예: 매일 23시 50분).
| |
(퍼센트 기호 %는 crontab 안에서는 이스케이프(\%) 해 주는 것이 안전하다.)
관련 기술
Crontab은 1분 단위·고정 시각 실행에 적합하다. 아래는 요구 사항에 따라 고려할 수 있는 대안이다.
Anacron
시스템이 24시간 켜져 있지 않아도 지난 실행을 보완해 주는 도구다. 예를 들어 “매일 실행”이었는데 그날 전원이 꺼져 있으면, 다음 부팅 후에 한 번 실행해 준다. 랩톱·데스크톱처럼 항상 켜 두지 않는 환경에서 유용하다.
Systemd 타이머
systemd를 쓰는 리눅스에서는 systemd timer 로 단위 서비스 실행 시각·간격을 정의할 수 있다. 캘린더식·초 단위 지정, 실패 시 재시도, 의존성 관리 등이 가능해 복잡한 스케줄이나 서비스 연동에 적합하다.
Windows 작업 스케줄러(Task Scheduler)
Windows에서 cron과 유사한 역할을 한다. GUI로 작업을 만들고, 트리거(시각·이벤트)·동작(실행할 프로그램)·조건을 설정할 수 있다. 리눅스의 crontab + 일부 systemd 타이머 기능을 조합한 것과 비슷하다.
결론
- Crontab은 리눅스에서 시간 기반 예약 작업을 등록·관리하는 표준 방식이다.
crontab -e로 편집,crontab -l로 확인,crontab -r로 전체 삭제한다. - 5필드 표현식(분·시·일·월·요일)과
*,-/조합으로 다양한 주기를 표현할 수 있다. - 한 줄에 하나의 작업, 주석 활용, 출력은
/dev/null또는 로그 파일로 리디렉션, 정기 백업을 습관화하면 운영이 안정적이다. - 1분 미만 주기·부팅 후 보완 실행·복잡한 의존성이 필요하면 systemd 타이머, Anacron, Windows 작업 스케줄러 등 대안을 검토하면 된다.
Crontab을 잘 활용하면 반복 작업을 자동화하고, 서버·개발 환경의 운영 효율을 높일 수 있다.
![Featured image of post [Linux] Crontab 사용법 — 예약 작업 편집·스케줄·로그·백업](/post/2023-09-21-crontab/wordcloud_hu_67d04155eb6f371d.webp)

![[Hardware] LattePanda Alpha에 Ubuntu 16.04 LTS 설치 가이드](/post/2018-12-06-install-ubuntu-16.04-on-lattepanda/wordcloud_hu_fc536f8de2cbd4bf.webp)
![[Rust] Comprehensive Rust 무료 강의 정리 및 코스 구조](/post/2022-12-30-comprehensive-rust/wordcloud_hu_d1420ff38434cdb6.webp)
![[Tutorial] Learn Prompting - 프롬프트 엔지니어링 무료 가이드 정리](/post/2022-12-30-learn-prompting/wordcloud_hu_6a9d105de4834753.webp)
![[How-To] Windows 10 다중 사용자 카카오톡 실행 권한 부여](/post/2021-04-07-window10-multiuser-kakaotalk/wordcloud_hu_5fcf6a8683d09a52.webp)
![[Plex] Windows에서 Plex Media Server 재실행·자동 재시작 가이드](/post/2023-01-13-restart-plex-media-server/wordcloud_hu_ba5ac3c6f7684b1d.webp)