기본 문법
crontab [-u 사용자] 파일명 | crontab [-u 사용자] [-l | -e | -r [-i]]
crontab은 사용자별 예약 작업 목록(crontab 파일)을 등록하고 조회하거나 삭제하는 명령어입니다. 등록된 작업은 cron 데몬(crond)이 1분 간격으로 확인해 지정된 시각에 실행합니다. 백업, 로그 정리, 헬스체크처럼 정해진 주기로 반복되는 작업을 자동화할 때 사용합니다.
crontab -e로 편집기를 열어 작성하는 방식이 가장 흔하지만, 미리 만들어 둔 파일을 'crontab 파일명' 형태로 설치하거나 표준입력으로 넘겨 비대화형으로 등록할 수도 있습니다. 시간 필드는 '분 시 일 월 요일' 다섯 개이며, 사용자 crontab에는 실행 사용자 필드가 없습니다. 반면 /etc/crontab과 /etc/cron.d/ 아래의 파일은 다섯 개 시간 필드 뒤에 실행 사용자를 한 칸 더 적어야 합니다.
Rocky Linux 8에서는 cronie 패키지가 crontab과 crond를 제공합니다. 실무에서는 '매일 02:00', '매주 월요일 09:10', '5분마다' 같은 요구 사항을 시간 필드로 옮기는 작업, 그리고 /etc/cron.d/ 파일의 형식과 권한(644)을 지키는 일이 자주 필요합니다.
자주 쓰는 옵션
| 옵션 | 의미 | 예 |
|---|---|---|
-l | 현재 등록된 crontab 내용을 표준출력으로 출력. 등록된 작업이 없으면 'no crontab for 사용자'를 표준오류로 출력하고 종료 코드 1을 반환 | crontab -l |
-e | EDITOR/VISUAL 환경변수에 지정된 편집기로 crontab을 편집(대화형) | crontab -e |
-u 사용자 | 지정한 사용자의 crontab을 대상으로 동작. 다른 사용자를 지정하려면 root 권한이 필요 | crontab -u demo_cron -l |
파일명 | 지정한 파일의 내용을 crontab으로 설치. 기존 내용은 모두 대체됨 | crontab /tmp/demo/mycron |
- | 파일명 자리에 '-'를 쓰면 표준입력에서 읽어 crontab으로 설치(비대화형 자동화에 사용) | echo '0 2 * * * /usr/local/bin/backup.sh' | crontab - |
-r | 현재 crontab을 삭제. 기본적으로 확인 절차 없이 전체가 삭제됨 | crontab -r |
-i | -r과 함께 사용해 삭제 전 y/Y 응답을 요구 | crontab -r -i |
실무 예시
현재 등록된 작업 확인
$ crontab -l
no crontab for root
현재 사용자에게 등록된 예약 작업을 출력합니다. 등록된 작업이 없으면 'no crontab for 사용자' 메시지가 표준오류로 출력되고 종료 코드는 1이 됩니다. 실습 컨테이너에서는 실행되지 않는 명령이라 대표 출력을 표시했습니다.
파일 내용을 crontab으로 설치
준비: mkdir -p /tmp/demo; printf '0 2 * * * /usr/local/bin/backup.sh\n30 3 * * 0 /usr/local/bin/rotate_logs.sh\n' > /tmp/demo/mycron
$ crontab /tmp/demo/mycron && crontab -l
0 2 * * * /usr/local/bin/backup.sh
30 3 * * 0 /usr/local/bin/rotate_logs.sh
편집기를 열지 않고 파일 내용을 그대로 crontab에 설치한 뒤 결과를 확인합니다. 매일 02:00과 매주 일요일 03:30에 실행하는 설정입니다. 기존 crontab 내용은 이 파일 내용으로 대체됩니다. 실습 컨테이너에서는 실행되지 않는 명령이라 대표 출력을 표시했습니다.
표준입력으로 등록
$ echo '*/5 * * * * /usr/local/bin/health_check.sh' | crontab -
파이프로 전달한 내용을 crontab으로 설치합니다. 정상 설치되면 출력이 없고 종료 코드는 0입니다. 기존 crontab 내용은 전달한 내용으로 대체되므로, 기존 항목을 유지하려면 'crontab -l > 파일' 로 먼저 내보낸 뒤 줄을 추가해 설치하세요. 실습 컨테이너에서는 실행되지 않는 명령이라 대표 출력을 표시했습니다.
다른 사용자의 crontab 관리
준비: mkdir -p /tmp/demo; id demo_cron >/dev/null 2>&1 || useradd demo_cron; echo '10 9 * * 1 /usr/local/bin/idh_backup.sh' > /tmp/demo/user_cron
$ crontab -u demo_cron /tmp/demo/user_cron && crontab -u demo_cron -l
10 9 * * 1 /usr/local/bin/idh_backup.sh
root 권한으로 demo_cron 사용자의 crontab을 설치하고 확인합니다. 매주 월요일 09:10에 실행하는 설정입니다. 일반 사용자가 -u를 쓰면 권한 오류로 실패합니다. 실습 컨테이너에서는 실행되지 않는 명령이라 대표 출력을 표시했습니다.
crontab 삭제 후 확인
준비: echo '0 4 * * * /usr/local/bin/archive_logs.sh' | crontab -
$ crontab -r; crontab -l
no crontab for root
-r은 확인 없이 현재 crontab 전체를 삭제합니다. 삭제 자체는 종료 코드 0이며, 이어서 실행한 -l은 등록된 작업이 없으므로 안내 메시지를 표준오류로 출력하고 종료 코드 1을 반환합니다. 이 예시에서는 종료 코드 1이 의도된 결과입니다. 실습 컨테이너에서는 실행되지 않는 명령이라 대표 출력을 표시했습니다.
주의할 점
- cron 실행 환경은 PATH가 최소한만 설정되므로 스크립트와 명령은 절대 경로로 적어야 합니다.
- crontab -r은 확인 없이 전체를 삭제합니다. 삭제 전 'crontab -l > 백업파일'로 내용을 보관하거나 -i를 함께 쓰세요.
- 파일 설치(crontab 파일명)와 'crontab -'는 기존 내용을 추가가 아니라 대체합니다. 기존 항목을 유지하려면 -l로 내보낸 뒤 편집해서 다시 설치하세요.
- /etc/cron.d/ 아래 파일은 시간 필드 뒤에 실행 사용자를 적어야 하며, 권한은 644(root 소유)로 둡니다. 777 같은 넓은 권한은 임의 사용자가 root 작업을 수정할 수 있어 사용하면 안 됩니다.
- cronie는 /etc/cron.d/ 에서 영문자·숫자·밑줄·하이픈으로만 이루어진 파일명을 읽습니다. 이름에 점(.)이 있으면 무시됩니다.
- crontab 명령줄의 % 문자는 개행으로 해석되므로 date +%F 같은 표현은 \%F처럼 이스케이프해야 합니다.
- /etc/crontab을 직접 편집하면 패키지 업데이트 시 충돌할 수 있습니다. 시스템 작업은 /etc/cron.d/ 에 별도 파일로 배치하는 편이 안전합니다.
- 작업이 실행되려면 crond 서비스가 동작 중이어야 합니다. systemctl status crond로 확인하세요.
이 명령어로 풀 수 있는 실습 문제
브라우저 웹 터미널에서 바로 풀고 요구사항별로 자동 채점됩니다. 로그인 없이 5분 체험도 가능합니다.
관련 명령어
마지막 검수 2026-09-16 · 내용에 오류가 있으면 문제 페이지의 질문 기능으로 알려 주세요.
