✅ Crontab이란?
Crontab은 리눅스에서 특정 시간에 특정 작업을 자동으로 실행하도록 예약하는 스케줄러이다.
예를 들어, 매일 자정에 백업 스크립트를 실행하거나, 매주 월요일 오전 9시에 리포트를 생성하는 작업을 사람이 직접 실행하지 않아도 자동으로 처리할 수 있다.
✅ 기본 명령어
| 명령어 | 설명 |
| crontab -e | 크론탭 편집 (등록/수정) |
| crontab -l | 등록된 크론탭 목록 확인 |
| crontab -r | 크론탭 전체 삭제 * 사용 주의 * |
💡 crontab -e 실행 시 vi 에디터가 열린다.
- :wq → 저장 후 종료
- :q! → 저장 없이 강제 종료
✅ 크론탭 문법 구조
* * * * * 실행할_명령어
│ │ │ │ │
│ │ │ │ └── 요일 (0~7, 0과 7은 일요일)
│ │ │ └───── 월 (1~12)
│ │ └──────── 일 (1~31)
│ └─────────── 시간 (0~23)
└────────────── 분 (0~59)
* 는 "모든" 을 의미한다. * * * * * = 매분, 매시, 매일, 매월, 매요일 → 즉 1분마다 실행
✅ 자주 쓰는 예제 모음
🔹 매 분마다 실행
* * * * * /home/FILE_NAME.sh
🔹 매 시간 정각에 실행
0 * * * * /home/FILE_NAME.sh
🔹 매일 오후 2시 10분에 실행
10 14 * * * /home/FILE_NAME.sh
🔹 오전 10시,오전 12시,오후 2시에 실행 (쉼표로 여러 시간 지정)
0 10,12,14 * * * /home/FILE_NAME.sh
🔹 평일(월~금) 오전 8시~오후 5시, 매 시간 정각에 실행
0 8-17 * * 1-5 /home/FILE_NAME.sh
🔹 매일 새벽 1시 0분~30분 동안 매분 실행
0-30 1 * * * /home/FILE_NAME.sh
🔹 30분마다 실행 (*/n = n마다 반복)
*/30 * * * * /home/FILE_NAME.sh
✅ 로그 남기기
실행 결과를 파일로 저장해두면 나중에 확인할 때 편리하다.
* * * * * /home/test.sh > /home/logs/test.log 2>&1
2>&1 : 에러 메시지도 함께 로그 파일에 저장된다.
📁 로그 파일 생성 관련 주의사항
| 상황 | 결과 |
| 로그 파일이 없는 경우 | 자동으로 생성됨 ✅ |
| 로그 파일이 있고 쓰기 권한이 있는 경우 | 정상 동작 ✅ |
| 로그 파일이 있고 쓰기 권한이 없는 경우 | 에러 발생 ❌ |
| 상위 디렉터리가 없는 경우 | 에러 발생 ❌ |
🔧 디렉터리 & 권한 설정
# 로그 디렉터리 생성 (-p 옵션 : 이미 존재해도 에러 없이 넘어감)
mkdir -p /home/logs
# 로그 파일 권한 확인
ls -l /home/logs/test.log
# 쓰기 권한 부여
chmod 644 /home/logs/test.log
또는 크론탭에서 디렉터리 생성까지 한번에 처리할 수도 있다.
* * * * * mkdir -p /home/logs && /home/test.sh > /home/logs/test.log 2>&1
💡 추가로 주의할 점
- cron은 root 또는 특정 유저 권한으로 실행되는 경우가 많다.
- 로그 파일 소유자와 cron 실행 유저가 다르면 권한 문제가 생길 수 있다.
- ls -l 로 파일 소유자도 함께 확인해두는 것이 좋다.
✅ 실행 시간 제한 걸기 (timeout)
특정 시간이 지나면 자동으로 종료되도록 설정할 수 있다.
# 매일 23시 30분에 실행하되, 5시간(18000초) 후 자동 종료
30 23 * * * timeout 18000 /home/FILE_NAME.sh
✅ 크론탭 백업하기
실수로 -r 명령어를 입력하면 전부 삭제된다. 백업 습관을 들여두자.
# 매일 23시 50분에 크론탭 목록을 파일로 백업
50 23 * * * crontab -l > /home/bk/crontab_bak.txt
✅ 크론탭 기호 정리
| 기호 | 의미 | 예시 |
| * | 모든 값 | * * * * * |
| , | 여러 값 지정 | 1,3,5 (1, 3, 5에 실행) |
| - | 범위 지정 | 1-5 (1부터 5까지) |
| */n | n마다 반복 | */10 (10분마다) |
✅ 크론 요일 번호 표준
| 번호 | 요일 |
| 0 또는 7 | 일요일 |
| 1 | 월요일 |
| 2 | 화요일 |
| 3 | 수요일 |
| 4 | 목요일 |
| 5 | 금요일 |
| 6 | 토요일 |
🚨 주의사항
- crontab -r 은 전체 삭제다. -e 와 헷갈리지 않도록 주의하자.
- 스크립트 경로는 절대경로를 사용하는 것이 안전하다. (./FILE_NAME.sh ❌ → /home/user/FILE_NAME.sh ✅)
- 크론탭은 환경변수가 제한적이므로, 스크립트 내부에 필요한 경로를 직접 명시해두는 것이 좋다.
'Backend > Linux' 카테고리의 다른 글
| 쉘 파일 실행 오류 : not found [그런 파일이나 디렉터리가 없습니다] (0) | 2026.04.06 |
|---|---|
| 리눅스 명령어로 현재 폴더 또는 특정 폴더의 파일 수 세기 (0) | 2026.04.04 |