Contents
see ListCrontab으로 작업 스케줄링
Crontab은 리눅스에서 주기적으로 명령어나 스크립트를 자동 실행하는 스케줄러입니다.
언제 사용하나요?
- 매일 자정에 데이터베이스 백업
- 매시간 로그 파일 정리
- 정기적인 배치 작업 실행
- 시스템 모니터링 알림
- 주기적인 데이터 동기화
기본 명령어
# crontab 편집
crontab -e
# 현재 등록된 작업 보기
crontab -l
# crontab 삭제
crontab -r
# 다른 사용자 crontab 편집 (root)
crontab -u username -eCrontab 형식
# ┌───────────── 분 (0-59)
# │ ┌───────────── 시 (0-23)
# │ │ ┌───────────── 일 (1-31)
# │ │ │ ┌───────────── 월 (1-12)
# │ │ │ │ ┌───────────── 요일 (0-7, 0과 7은 일요일)
# │ │ │ │ │
# * * * * * 실행할 명령어자주 사용하는 예시
# 매분 실행
* * * * * /path/to/script.sh
# 매시간 정각에 실행
0 * * * * /path/to/script.sh
# 매일 자정에 실행
0 0 * * * /path/to/script.sh
# 매일 오전 9시에 실행
0 9 * * * /path/to/script.sh
# 매일 오후 6시 30분에 실행
30 18 * * * /path/to/script.sh
# 매주 월요일 오전 8시에 실행
0 8 * * 1 /path/to/script.sh
# 매월 1일 자정에 실행
0 0 1 * * /path/to/script.sh
# 평일(월-금) 오전 9시에 실행
0 9 * * 1-5 /path/to/script.sh
# 매 5분마다 실행
*/5 * * * * /path/to/script.sh
# 매 30분마다 실행
*/30 * * * * /path/to/script.sh
# 매 2시간마다 실행
0 */2 * * * /path/to/script.sh
# 오전 9시부터 오후 6시까지 매시간
0 9-18 * * * /path/to/script.sh특수 문자
| 문자 | 의미 | 예시 |
|---|---|---|
| * | 모든 값 | * * * * * (매분) |
| , | 여러 값 | 0 9,18 * * * (9시, 18시) |
| - | 범위 | 0 9-18 * * * (9시~18시) |
| / | 간격 | */5 * * * * (5분마다) |
특수 키워드
@reboot # 부팅 시 한 번 실행
@yearly # 매년 1월 1일 (0 0 1 1 *)
@monthly # 매월 1일 (0 0 1 * *)
@weekly # 매주 일요일 (0 0 * * 0)
@daily # 매일 자정 (0 0 * * *)
@hourly # 매시간 (0 * * * *)
# 예시
@daily /home/user/backup.sh
@reboot /home/user/startup.sh실전 예시
# 데이터베이스 백업 (매일 새벽 3시)
0 3 * * * mysqldump -u root -p\047password\047 mydb > /backup/db_2026\0114.sql
# 오래된 로그 삭제 (매일 자정, 30일 이상)
0 0 * * * find /var/log/myapp -name "*.log" -mtime +30 -delete
# 디스크 사용량 체크 (매시간)
0 * * * * df -h | mail -s "Disk Usage" admin@example.com
# 서버 상태 체크 (5분마다)
*/5 * * * * curl -s https://myserver.com/health || echo "Server down" | mail -s "Alert" admin@example.com
# 캐시 정리 (매주 일요일 새벽 4시)
0 4 * * 0 /home/user/clear-cache.sh
# Spring Boot 애플리케이션 로그 로테이션 (매일)
0 0 * * * /usr/sbin/logrotate /etc/logrotate.d/myapp출력 처리
# 출력 무시
* * * * * /path/to/script.sh > /dev/null 2>&1
# 로그 파일로 저장
* * * * * /path/to/script.sh >> /var/log/cron.log 2>&1
# 에러만 로그
* * * * * /path/to/script.sh 2>> /var/log/cron-error.log
# 결과를 메일로 (MAILTO 설정 필요)
MAILTO=admin@example.com
0 9 * * * /path/to/script.sh환경 변수 설정
# crontab 상단에 환경 변수 정의
SHELL=/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin
JAVA_HOME=/usr/lib/jvm/java-11
MAILTO=admin@example.com
0 9 * * * java -jar /opt/app/batch.jar문제 해결
# cron 서비스 상태 확인
systemctl status crond # CentOS
systemctl status cron # Ubuntu
# cron 로그 확인
tail -f /var/log/cron # CentOS
grep CRON /var/log/syslog # Ubuntu
# 스크립트 권한 확인
chmod +x /path/to/script.sh
# 절대 경로 사용 (중요!)
# X: script.sh
# O: /home/user/script.sh주의사항
- 항상 절대 경로 사용 (명령어, 파일 모두)
- 스크립트에 실행 권한 부여 필요
- 환경 변수가 일반 쉘과 다름 (PATH 등 명시)
- %는 특수문자, 사용시 \\%로 이스케이프